This is my mongodb collection.
我想使用 findOneAndUpdate() 将对象推送到数组。
这是我的 nodejs 代码。
url = req.params.posturl
filter = { url: url }
update = { comments: (result.like + 1) }
// maybe you can try save/get this to/in .json
Blog.findOneAndUpdate(filter, update)
.then((result) => {
res.json({ status: 1 })
})
.catch((error) => {
console.log(error);
})
我该怎么做?
答案 0 :(得分:0)
试试这个:
url = req.params.posturl
filter = { url: url }
Blog.findOne(filter)
.then((result) => {
result.like ++;
return result.save();
})
.then(result => {
res.json({status: 1});
})
.catch((error) => {
console.log(error);
})
我想你明白了。我没明白评论是什么,但这是你应该尝试的方式
答案 1 :(得分:0)
使用 Node.js 驱动程序的 returnOriginal:false
作为数据库调用的第三个参数。将行更改为:
filter = { url: url }
update = { comments: (result.like + 1) }
return = { returnOriginal: false }
Blog.findOneAndUpdate(filter, update, return)
有些人正在使用 Mongoose 来避免这种复杂性。 Node.js 文档很棒,但可读性不高。
答案 2 :(得分:0)
您可以使用 $push
运算符来更新数组。实际上,您也有一些方法来更新文档,例如 $set
运算符或找到一个并更改文档然后保存新文档,这将更新您的文档。
TLDR代码在这里;
const url = req.params.posturl
const newComment = req.body.comment
const filter = { url }
const willBePush = { comments: newComment }
Blog.findOneAndUpdate(filter, { $push: willBePush })
.then((result) => {
/** Do whatever with response if you want to see new document you can pass { new: true } as option for findOneAndUpdate method*/
console.log(result)
})
.catch((error) => {
console.log(error);
})
参考文献: