我正在尝试在数组中的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的内容,但同样的错误仍然存在。
感谢任何帮助,提前谢谢!
答案 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);
}
});