MongoDB-无法将项目推入数组内对象的数组内

时间:2019-02-26 20:33:30

标签: arrays mongodb mongoose

我在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。

我创建了一个测试数据库 enter image description here

并尝试了此命令 enter image description here

仍然无法正常工作。

1 个答案:

答案 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: 更新语句工作得很好。

Update statement 更新声明

Record updated successfuly 更新后记录 -我用您的数据运行了更新,然后发布了更新代码,两者都很好。