首页 > 解决方案 > 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。

我创建了一个测试数据库 在此处输入图像描述

并尝试了这个命令 在此处输入图像描述

还是行不通。

标签: arraysmongodbmongoose

解决方案


你的陈述有3个问题。首先,根 ID 字段是“id”,您正在查询“_ID”。

其次,您应该完全放置匹配字段。此更新按预期工作。

第三,您应该使用“$”来选择嵌套数组位置,而不是“$[id]”。

db.pautas.updateOne(
{ "id": ObjectId("1"), "data.universities._id": "2"}, 
{$push: 
    {"data.universities.$.students": {name: "aStudentName", age: 22}}
})

更新问题的答案: 更新语句工作得很好。

更新声明 更新声明

记录更新成功 更新后记录- 我使用您的数据运行更新,然后使用您发布的更新代码,两者都运行良好。


推荐阅读