将对象推送到mongodb nodejs中的数组



这是我的mongodb集合。

我想用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);
})

我该怎么做?

您可以使用$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);
})

参考文献:

$push

$set

猫鼬文件

试试这个:

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);
})

我想你已经明白了。我没有得到什么评论,但这是你应该尝试的方式

使用Node.js驱动程序的returnOriginal:false作为DB调用的第三个参数。将行更改为:

filter = { url: url }
update = { comments: (result.like + 1) }
return = { returnOriginal: false }
Blog.findOneAndUpdate(filter, update, return)

有些人使用Mongoose来避免这种复杂性。Node.js文档很棒,但可读性不太好。

最新更新