如何在特定项目中更新数组中的mongodb

如何在特定项目中更新数组中的mongodb,mongodb,Mongodb,这是我在mongodb中的示例文档,我想在value key中更新 原始文件 "_id" : ObjectId("54c76632a2abd01508508225"), "del" : "N", "value" : [ { "1" : "A", "2" : "B", "fromDate" : ISODate("2015-02-13T20:59:28.947Z") } ] 我想在值字段中插入“3”:“C” 预期文件 "_id" :

这是我在mongodb中的示例文档,我想在value key中更新

原始文件

"_id" : ObjectId("54c76632a2abd01508508225"),
"del" : "N",
"value" : [
    {
        "1" : "A",
        "2" : "B",
        "fromDate" : ISODate("2015-02-13T20:59:28.947Z")
    }
]
我想在值字段中插入“3”:“C”

预期文件

"_id" : ObjectId("54c76632a2abd01508508225"),
"del" : "N",
"value" : [
    {
        "1" : "A",
        "2" : "B",
        "3" : "C",
        "fromDate" : ISODate("2015-02-13T20:59:28.947Z")
    }
]
我尝试了这个查询,但它将被错误地创建

db.collection.update({ "_id" : ObjectId("54c76632a2abd01508508225")},
         {$push: { 
                    "value":{ "3":"C" } 
                  }
         }
         )
谢谢

//Better You try Below Query
   db.collection.update(
        {
            "_id" : ObjectId("54c76632a2abd01508508225"),
            "value.1":"A",
            "value.2":"B",
        },
        {
            $set:{
                "value.$.3": "C"
            }
        },function(err,Status){
            if(!err){
                console.log("Update Successfully")
            }
        }
    )
仅当值.1为“A”且值.2为“B”时,上述查询才会更新


亲爱的,我建议您不要以数字开头字段名,要使用$push字段类型,字段类型应为数组,当您尝试该查询时,它将推送到值而不是值。0;在这里,你们试图推到里面的物体,这是行不通的

db.collection.update(
{ 
  _id : ObjectId("54c76632a2abd01508508225"),
    "value.1" : "A",
    "value.2" : "B"
},
{ 
  $set: {
          "value.$" : {
              "1" : "A",
              "2" : "B",
              "3" : "C"
              }
  }
}
);

通过此查询,您可以替换值数组中的整个对象,或者我强烈建议重新考虑模式

我认为
“value'
是一个数组,其中有一个带有编号键的文档,这更能说明存在预先存在的问题,而不是您应该继续的问题。”。为什么此文档应处于这种状态?编号键背后的目的是什么?可能是@Neil Lunn的副本我只将其放在样本数据中请帮助我帮助我们解释您的意思。如果这是一个示例,那么它不是一个好的数据结构。如果你有不同的真实数据,那么你需要证明这一点。模糊你真正需要做的事情并不能得到正确的答案。@Neil Lunn我知道,先生,但我们公司对数百万个文档使用了这种结构。我在显示>WriterResult({“nMatch”:0,“nUpserted”:0,“nModified”:0,“writeError”:{“code”:16836,“errmsg”:“位置运算符未从查询中找到所需的匹配项。未展开的更新:value.$.3”}}@Arav是否以字符而非数字开头字段名?”