是否有任何选项返回新更新或创建的文档与完整的对象,而不是计数在mongoose bulkWrite()方法?


const operations = [
{
updateOne: {
filter: { email: 'email.1@gmail.com' },
update: {
firstName: 'firstName.1',
lastName: 'lastName.1',
password: 'Password',
},
upsert: true,
},
},
{
updateOne: {
filter: { email: 'email.2@gmail.com' },
update: {
firstName: 'firstName.2',
lastName: 'lastName.2',
password: 'Password',
},
upsert: true,
},
},
{
updateOne: {
filter: { email: 'email.3@gmail.com' },
update: {
firstName: 'firstName.3',
lastName: 'lastName.3',
password: 'Password',
},
upsert: true,
},
},
];

我想在bulkWrite操作中执行以上操作。

try {
const bulkWriteRes = await users.bulkWrite(operations);
console.log(bulkWriteRes);
} catch (err) {
console.log(err);
}

但是在bulkWriteRes中,我只能得到这些细节。

BulkWriteResult {
ok: 1,
writeErrors: [],
writeConcernErrors: [],
insertedIds: [],
nInserted: 0,
nUpserted: 1,
nMatched: 3,
nModified: 3,
nRemoved: 0,
upserted: [
{
index: 5,
_id: '63c977188eb489a9c9cfa4e2',
},
],
};

我想要整个更新对象,无论是创建还是更新,包括字段_id,我已经在过滤器和更新属性中传递的字段。是否有其他选择?

您可以将所有更新作为单独的文档并首先将它们存储为新集合(说toBeUsers)。然后,您可以执行$merge将记录插入users集合。

db.toBeUsers.aggregate([
{
"$merge": {
"into": "users",
"on": "email",
"whenMatched": "merge",
"whenNotMatched": "insert"
}
}
])

Mongo操场

最新更新