如果它们不存在,我必须插入多个文档,但重要的是,在查询结果中,我需要有插入的和已经存在的项目的 ID。
我正在尝试以下bulkWrite操作:
// external_id is a unique id other than the mongo _id
let items = [
{external_id: 123, name: "John"},
{external_id: 456, name: "Mike"},
{external_id: 789, name: "Joseph"}
];
db.collection("my_collection")
.bulkWrite(
items.map((item) => {
return {
updateOne: {
filter: { external_id: item.external_id },
update: { $setOnInsert: item},
upsert: true,
},
};
})
);
Run Code Online (Sandbox Code Playgroud)
问题是BulkWriteResult仅返回_id中插入项目的upsertedIds,而对于现有项目仅返回nMatched数字。
我想到的另一个解决方案是使 (1) 一个findid 数组,(2) 检查已经存在的结果,以及 (3) 然后insertMany检查新的结果:
let ids = …Run Code Online (Sandbox Code Playgroud)