如何解决MongoDB 如果存在则更新,如果不存在则插入:从集合 A 到集合 B 的数组
我有 2 个集合 Master
和 Page
,_id
集合中的 Master
在 master_page_id
集合的 Page
字段中被引用。
我在 express js API 中使用 updateMany()
和 upsert: true
来过滤和更新现有的并将新从 Master
插入到 Page
。
过滤条件:
更新
IF:页面集合中的 master_page_id
与主集合中的 _id
匹配
Else:INSERT从Master
到Page
现在我需要遍历来自 Master 的数据数组,并为每条记录调用 updateMany 以进行 upsert。 有没有更好的方法,我可以从 master 发送整个数组,如果存在则更新,如果不存在则插入
以下是大师合集
[
{"_id":{"$oid":"60e3f0b29515843a7250d2a3"},"page_status":"Active","page_name":"page_one","page_title":"New Page","page_Meta_tags":{"page_description":"This is New Page","page_keyword":null},"page_slug":"/new-page","entity":null,"master_page_version":"version_001"},{"_id":{"$oid":"60e3f0b29515843a7250d2a4"},"page_name":"page_two","page_title":"3 comp and 2 override","page_slug":"/page_two",{"_id":{"$oid":"60e3f0b29515843a7250d2a5"},"page_author":"Bharath","page_name":"page_three","page_title":"3 comp and 0 override","page_slug":"/page_three","master_page_version":"version_001"}
]
以下是页面集
[
{"_id":{"$oid":"60dbe7ae75fa3a2c0434a87a"},"master_page_id":"60e3f0b29515843a7250d2a3","master_page_version":"version_001"}
]
快递Js
Masters.aggregate([
{
$match: {client_id: "C_00001"}
},{
$project: {
_id: 1,page_name: 1,page_title: 1,page_type: 1,page_status: 1,page_slug: 1,page_Meta_tags: {
page_description: 1,page_keyword: 1
},entity: 1,master_page_id: "$_id",client_id: client_id,}
}
]).exec((err,data) => {
if (err) { res.status(HttpStatusEnum.badserver).json(err); return; };
if(data && data.length > 0){
data.forEach(rec => {
Pages.updateMany({
"master_page_id": rec._id
},{
$set: {
page_status: rec.page_status,page_name: rec.page_name,page_title: rec.page_title,page_type: rec.page_type,page_Meta_tags: rec.page_Meta_tags,page_slug: rec.page_slug,entity: rec.entity,master_page_id: rec._id,master_page_version: rec.master_page_version,client_id: rec.client_id
}
},{ upsert: true },).exec((err,doc) => {
res.status(HttpStatusEnum.success).json({doc});
});
});
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。