无法将自定义对象添加到mongoDB文档阵列中

时间:2017-07-04 20:30:26

标签: javascript node.js mongodb

我正在尝试在数组中的mongodb文档中添加一个新对象。

我有一个使用MongoDB的NodeJS项目,它有一个叫做“Teste”的集合,我在那里保存了一些随机数据。

其中数据是一个名为“ArrayTeste”的数组。目前它只保存多个字符串,因为我命名我的输入相同的东西,所以它自动为我做。

但我不想将每个元素保存为单个字符串,我需要获取这些信息,将它们分组到一个对象中,然后将其添加到数组中。

这是我在NodeJS中的代码片段:

ServicosModel.prototype.Teste = function (req, res) {
console.log("Metodo Teste");
var query =
    {
        $push:
        {
            ArrayTeste:
            {
                Dado1: req.body.Dado1,
                Dado2: req.body.Dado2
            }
        }
    }

console.log(query)

this._connection.open(function (errConn, mongoClient) {
    console.log("Entrou open")
    if (errConn) {
        res.end("Deu erro" + errConn);
    }
    mongoClient.collection("teste", function (errColl, collection) {
        if (errColl) {
            res.end("Deu erro" + errColl);
        }
        console.log("Entrou collection")
        collection.update(query, function (errUpdate, result) {
            console.log("Entrou update")
            if (errUpdate) {
                res.end("Deu erro" + errUpdate);
            } else {
                res.end("Deu certo " + result);
            }
        });
    });
});

}

这是mongoDB文档结构:

{
"_id" : ObjectId("595bf19febbf3c14e481bc28"),
"id" : "2",
"Titulo" : "TItulo do negocio",
"ArrayTeste" : [ 
    "dado1", 
    "dado2"
]

}

“id”参数是我创建的参数,用于简化之前测试中使用的$ elemMatch,因此我不必搜索文档的_id。

当我运行代码并将内容插入输入时,我会收到此错误:

  

(node:8712)UnhandledPromiseRejectionWarning:未处理的承诺   rejection(拒绝id:1):MongoError:文件必须是有效的   JavaScript对象

我完全不知道发生了什么。应用程序只是冻结。我搜索了这些帖子并尝试了一些$ set和$ addToSet的内容,但同样的错误仍然存​​在。

感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

要更新文档,您需要两个必需参数:

  • criteria - 选择要更新的文档
  • update - 修改所选文件

以下是驱动程序文档:https://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html#update

错误说collection.update需要一个对象(第二个参数)并且它正在接收一个函数(你的回调函数)。

让代码正常工作:

var select = {id: '2'};  // Here we are choosing the document

collection.update(select, query, function (errUpdate, result) {
    if (errUpdate) {
        res.end("Deu erro" + errUpdate);
    } else {
        res.end("Deu certo " + result);
    }
});