Mongo插入/更新 - 一对多模型

时间:2017-03-15 17:36:15

标签: mongodb

我刚刚开始学习mongodb并为自己的事业启动个人应用程序。

我会在这里解释我的问题,因为我自己无法解决这个问题,而且我尝试了很多方法。

我创建了一个这样的对象:

db.morosos.insert({
"idlor": "XXXXX",
"comunidad": "XXXXX",
"vivienda": "XXXXX",
"demandado": "XXXXX",
"importe": "XXXXX",
"datos": [
    {
        "fecha": "XXXXXX",
        "dato": "XXXXXX"
    }],
"date": new Date("<dd-mm-YYYY>")})

然后我想用新的“fecha”和新的“dato”添加新的“datos”,就像数组一样。

我尝试使用:

db.morosos.updateOne(
  { "idlor" : "XXXXX" },
  { $inc: { "datos" : { "fecha": "XXXXX", "dato": "XXXX" } } }   )

 db.morosos.updateOne(
  { "idlor" : "XXX" },
  { $push: { "datos" : { "fecha": "XXXXX",
        "dato": "XXXX" } } }   )

db.morosos.update(
   { "idlor" : "XXXX" },
   {
       $addToSet: {
           "datos": {
                "fecha": "XXXXX",
                "dato": "XXXXX" 
                }
           }
       }   )

没有人像我想的那样工作,只是改变信息或者让我失败:

WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
            "code" : 16837,
            "errmsg" : "Cannot apply $addToSet to a non-array field. Field named 'datos' has a non-array type Object in the document _id: ObjectId('58c81ba0fb02f3066e2af169')"
    }})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
            "code" : 16837,
            "errmsg" : "The field 'datos' must be an array but is of type Object in document {_id: ObjectId('58c81ba0fb02f3066e2af169')}"
    }})

所以目前我不知道该怎么做,我还在寻找如何解决它。

感谢。

1 个答案:

答案 0 :(得分:0)

编辑:你确定你正在使用支持updateOne命令的mongodb服务器3.2或更高版本吗?如果没有,请使用.update()命令而不是.updateOne()

 db.morosos.updateOne(
  { "idlor" : "XXX" },
  { $push: { "datos" : { "fecha": "XXXXX",
        "dato": "XXXX" } } }   )

应该有效但您的更新查询{ "idlor" : "XXX" }与示例文档不匹配。

我更改了idlor以匹配示例文档(XXX到XXXXX)

>  db.morosos.updateOne(
...   { "idlor" : "XXXXX" },
...   { $push: { "datos" : { "fecha": "XXXXX",
...         "dato": "XXXX" } } }   )

并推动工作正常

> db.morosos.findOne()
{
    "_id" : ObjectId("58c9890a57c5133b63c05b86"),
    "idlor" : "XXXXX",
    "datos" : [
        {
            "fecha" : "XXXXXX",
            "dato" : "XXXXXX"
        },
        {
            "fecha" : "XXXXX",
            "dato" : "XXXX"
        }
    ],
}