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

Mongodb Mongo插入/更新-一对多模型,mongodb,Mongodb,我刚刚开始学习mongodb,开始为自己的业务开发个人应用程序 我会在这里解释我的问题,因为我自己解决不了,我尝试了很多方法 我创建一个对象,如下所示: db.morosos.insert({ "idlor": "XXXXX", "comunidad": "XXXXX", "vivienda": "XXXXX", "demandado": "XXXXX", "importe": "XXXXX", "datos": [ { "fecha": "XXXXXX",

我刚刚开始学习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>")})
没有人能像我想的那样工作,它只是改变了信息,或者给我一个失败,比如:

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')}"
    }})
所以现在我不知道该怎么办,我还在寻找解决方法


谢谢。

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

应该可以工作,但是您的更新查询
{“idlor”:“XXX”}
与示例文档不匹配

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

而且推得很好

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

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

应该可以工作,但是您的更新查询
{“idlor”:“XXX”}
与示例文档不匹配

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

而且推得很好

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

谢谢你的帮助,但是兄弟,XXX只是一个例子,不写信息。使用X作为变量,这里认为XXX与XXXXX相同。您确定mongodb server 3.2或更高版本具有updateone命令吗?当我使用mLab免费服务器时,在ubuntuI上的我的3.2上,这个确切的命令似乎起作用。mongod版本:3.2.11(MMAPv1)2017-03-15T20:24:29.727+0100 E QUERY[thread1]WriteError:字段'datos'必须是数组,但在文档{u id:ObjectId('58c81ba0fb02f3066e2af169')中属于Object类型:}:WriteError({“索引”:0,“代码”:16837,“errmsg”):“字段'datos'必须是数组,但在{u id:ObjectId('58c81ba0fb02f3066e2af169'),“op:{”q:{”idlor:“LOR01/16”},“u:{”$push:{”datos:{”fecha:“27/07/2016”中为Object类型,“dato”:“Carta enviada”}}},“multi”:false,“upsert”:false}) WriteError@src/mongo/shell/bulk_api.js:469:48 bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:836:49 bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13 bulk/this。execute@src/mongo/shell/bulk_api.js:1150:21 DBCollection.prototype。updateOne@src/mongo/shell/crud_api.js:550:17@(shell):1:1感谢您的帮助,但兄弟,XXX只是一个不写信息的例子。使用X作为变量,这里认为XXX与XXXXX相同。您确定mongodb server 3.2或更高版本具有updateone命令吗?当我使用mLab免费服务器时,在ubuntuI上的我的3.2上,这个确切的命令似乎起作用。mongod版本:3.2.11(MMAPv1)2017-03-15T20:24:29.727+0100 E QUERY[thread1]WriteError:字段'datos'必须是数组,但在文档{u id:ObjectId('58c81ba0fb02f3066e2af169')中属于Object类型:}:WriteError({“索引”:0,“代码”:16837,“errmsg”):“字段'datos'必须是数组,但在{u id:ObjectId('58c81ba0fb02f3066e2af169'),“op:{”q:{”idlor:“LOR01/16”},“u:{”$push:{”datos:{”fecha:“27/07/2016”中为Object类型,“dato”:“Carta enviada”}}},“multi”:false,“upsert”:false}) WriteError@src/mongo/shell/bulk_api.js:469:48 bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:836:49 bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13 bulk/this。execute@src/mongo/shell/bulk_api.js:1150:21 DBCollection.prototype。updateOne@src/mongo/shell/crud_api.js:550:17@(shell):1:1
>  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"
        }
    ],
}