如何解决mongodb,在附加到数组时检查键是否存在
注意:检查键 books
是否存在,如果不存在则创建并更新它。
我正在使用带有 nodejs 的 mongodb 驱动程序。
在db.collection('userData')
文档中如下所示:
{
user_id: 'user1',books: [{
id: 'book1',title: 'this is book1'
},{
id: 'book1',title: 'this is book1'
}]
}
插入新书条目时,如何检查文档中是否存在books
数组,如果不存在则在文档中添加键books
,然后插入书条目。
解决方法
您必须进行 2 个单独的查询,
- 查找用户文档
- 检查状态是否存在书籍字段
- 如果存在则推送对象,否则设置新字段
var user_id = "user1";
var bookData = { id: 'book1',title: 'this is book1' };
// FIND USER DATA
var userData = await db.collection('userData').findOne({ user_id: user_id },{ books: 1 });
var updateBody = { $push: { books: bookData } };
// IF BOOKS FIELD NOT PRESENT THEN SET NEW
if (!userData.books) {
updateBody = { $set: { books: [bookData] } };
}
var updateData = await db.collection('userData').updateOne({ user_id: user_id },updateBody);
console.log(updateData);
从 MongoDB 4.2 开始,您可以使用 update with aggregation pipeline 的第二个选项,
-
$ifNull
检查字段是否为空然后返回 [] -
$concatArrays
将当前books
与新书对象连接起来
var bookData = { id: 'book1',title: 'this is book1' };
db.collection('userData').update({
// put your condition
},[{
$set: {
books: {
$concatArrays: [
{ $ifNull: ["$books",[]] },[bookData]
]
}
}
}],{ multi: true }
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。