我在MongoDB中有这个对象:
{
_id: ObjectId("1"),
data: {
city: "ccp",
universities: [
{
_id: "2"
name: "universityOne"
students: []
},
{
_id: "3"
name: "universityTwo",
students: []
}
]
}
}
我需要将Student
数组内的students
数组内的universityOne
对象推入全局对象内的universities
数组内的{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }
对象内。
我尝试了文档,并提出了这个查询。
Mongo Shell返回db.pautas.updateOne({_id: ObjectId("1")}, {$push: {"data.universities.$[id].students": {name: "aStudentName", age: 22}}}, {arrayFilters: [{"id._id": ObjectId("2")}]})
。并没有任何改变。
以下是格式化/未格式化的查询,因此您可以看到它们:
[<identifier>]
db.pautas.updateOne({_ id:ObjectId(“ 1”)},{$ push:{“ data.universities。$ [id] .students”:{name:“ aStudentName”,age:22}} },{arrayFilters:[{“ id._id”:ObjectId(“ 2”)}]}))
第二个查询的名称为mongo 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: []
}
]
}
}
db.pautas.updateOne({_ id:ObjectId(“ 1”)},{$ push:{“ data.universities。$ [name] .students”:{name:“ aStudentName”,年龄:22}} },{arrayFilters:[{“ name.name”:“ universityOne”}]})
致谢。
更新
真实对象:
pautas
我需要在pautas
数组中添加Pauta。我已将db.pautas.updateOne({"_id":ObjectId("5c6aef9bfc1a2693588827d9"), "datosAcademicos.internados._id": ObjectId("5c6bfae98857df9f668ff2eb")}, { $push: {"datosAcademicos.internados.$.pautas": "hi"}})
设置为字符串数组以进行调试,因此只需要推送“ hello world”或任何字符串即可。
我用给出的答案尝试了这一点:
previous_owner
db.pautas.updateOne({“ _ id”:ObjectId(“ 5c6aef9bfc1a2693588827d9”),“ datosAcademicos.internados._id”:ObjectId(“ 5c6bfae98857df9f668ff2eb”)},{$ push:{“ datosados。 “:” hi“}})
更新2:
Mongo版本:v4.0.2 使用Robo 3T。
仍然无法正常工作。
答案 0 :(得分:2)
您的陈述有3个问题。首先,根ID字段是“ id”,而您正在查询“ _ID”。
第二,您应该将匹配字段完全放在一起。此更新按预期工作。
第三,您应该使用“ $”选择嵌套数组的位置,而不是“ $ [id]”。
db.pautas.updateOne(
{ "id": ObjectId("1"), "data.universities._id": "2"},
{$push:
{"data.universities.$.students": {name: "aStudentName", age: 22}}
})
问题UPDATE: 更新语句工作得很好。