arrays - MongoDB - 无法将项目推送到数组内的对象内的数组
问题描述
我在 MongoDB 中有这个对象:
{
_id: ObjectId("1"),
data: {
city: "ccp",
universities: [
{
_id: "2"
name: "universityOne"
students: []
},
{
_id: "3"
name: "universityTwo",
students: []
}
]
}
}
我需要将数组内的对象推入Student
数组students
内的universityOne
对象内universities
,在全局对象内。
我尝试了文档并提出了这个查询。Mongo shell 返回{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }
. 没有任何改变。
以下是格式化/未格式化的查询,因此您可以看到它们:
db.pautas.updateOne({_id: ObjectId("1")}, {$push: {"data.universities.$[id].students": {name: "aStudentName", age: 22}}}, {arrayFilters: [{"id._id": ObjectId("2")}]})
db.pautas.updateOne({_id: ObjectId("1")}, {$push: {"data.universities.$[id].students": {name: "aStudentName", age: 22}}}, { arrayFilters: [{"id._id": ObjectId("2")}]})
第二个查询是 mongo 上的大学名称[<identifier>]
。但也不起作用。
db.pautas.updateOne({_id: ObjectId("1")}, {$push: {"data.universities.$[name].students": {name: "aStudentName", age: 22}}}, {arrayFilters: [{"name.name": "universityOne"}]})
db.pautas.updateOne({_id: ObjectId("1")}, {$push: {"data.universities.$[name].students": {name: "aStudentName", age: 22}}}, { arrayFilters: [{"name.name": "universityOne"}]})
问候。
更新
实物:
{
_id: ObjectId("5c6aef9bfc1a2693588827d9"),
datosAcademicos: {
internados: [
{
_id: ObjectId("5c6bfae98857df9f668ff2eb"),
pautas: []
},
{
_id: ObjectId("5c6c140f8857df9f668ff2ec"),
pautas: []
}
]
}
}
我需要在pautas
数组中添加一个 Pauta。我已经设置pautas
了一个字符串数组用于调试目的,所以只需要推送一个“hello world”或任何字符串。
我用我得到的答案尝试了这个:
db.pautas.updateOne({"_id":ObjectId("5c6aef9bfc1a2693588827d9"), "datosAcademicos.internados._id": ObjectId("5c6bfae98857df9f668ff2eb")}, { $push: {"datosAcademicos.internados.$.pautas": "hi"}})
db.pautas.updateOne({"_id":ObjectId("5c6aef9bfc1a2693588827d9"), "datosAcademicos.internados._id": ObjectId("5c6bfae98857df9f668ff2eb")}, { $push: {"datosAcademicos.internados.$.pautas": "你好”}})
更新 2:
Mongo 版本:v4.0.2 使用 Robo 3T。
还是行不通。
解决方案
你的陈述有3个问题。首先,根 ID 字段是“id”,您正在查询“_ID”。
其次,您应该完全放置匹配字段。此更新按预期工作。
第三,您应该使用“$”来选择嵌套数组位置,而不是“$[id]”。
db.pautas.updateOne(
{ "id": ObjectId("1"), "data.universities._id": "2"},
{$push:
{"data.universities.$.students": {name: "aStudentName", age: 22}}
})
更新问题的答案: 更新语句工作得很好。
推荐阅读
- javascript - 如何在 HTML 标签上打印/显示动态值?
- aws-cognito - Pivotal Cloud Foundry (PCF) 上的 AWS Cognito 替代品
- python - 导入不规则大小的文本文件
- python - 得到 IndexError 时使数组重复
- python - tensorflow gpu 安装失败
- java - 是否可以换出用于运行 Java 的 JavaExecAction Gradle?
- java - 如何调用未知类型的 lambda
- go - 为什么我可以将结构函数分配给其他结构的成员?
- node.js - node js selenium-webdriver 将页面另存为
- c# - 如何在 C# 中使用 Header Request 从另一个控制器调用一个控制器?