更新一级数组使用我需要更新的任何版本请在这里建议

时间:2015-02-13 05:45:03

标签: mongodb

我在我的应用程序中使用mongoDb。在这里我遇到了查询数据库的问题   我的查询是:

我想在查询条件children.cars.carmodel = 22上设置字段children.cars.carname ='vws'。

db.selectone.update({'children.cars':{$elemMatch:{'carmodel':22}}},{$set:{'children.cars.$.carname':'vws'}});
            WriteResult({
                "nMatched" : 0,
                "nUpserted" : 0,
                "nModified" : 0,
                "writeError" : {
                    "code" : 16837,
                    "errmsg" : "cannot use the part (children of children.cars.0.carname) to traverse the element ({children: [ { cars: [ { carname: \"tata\", carmodel: 23.0 }, { carname: \"nano\", carmodel: 22.0 } ] } ]})"
            }
        })

集合名称是selectone:

  [
  {
    title: "Parent1",
    children: [
      {
        cars: [
          {
            carname: 'tata',
            carmodel:23
          },
          {
            carname:'nano',
            carmodel:22
          }
        ]
      }
    ]

  },
  {
    title: "Parent2",
    children: [
      {
        cars: [
          {
            carname:'volvo',
            carmodel:22
          },
          {
            carname:'maruthi',
            carmodel:25
          }
        ]
      }
    ]

  }
]

1 个答案:

答案 0 :(得分:0)

你的问题是你的孩子是一个阵列:

{
    title: "Parent1",
    children: [{
        cars: [{
            carname: 'tata',
            carmodel:23
          },{
            carname:'nano',
            carmodel:22
        }]
    }]
}
一个对象{cars: [...]}

。当您进行更新时,您将其称为对象。如果要将架构更改为

{
        title: "Parent1",
        children: {
            cars: [{
                carname: 'tata',
                carmodel:23
              },{
                carname:'nano',
                carmodel:22
            }]
        }
   }

注意现在孩子是一个对象,它应该工作。另外请记住,数据库中没有架构文档的想法并不意味着您可以在数组中嵌入数十级嵌套,然后以某种方式创建查询来使用它。这个想法是架构不像RDBM那样严格。