Sar*_*lla 5 mongoose mongodb node.js mongodb-query
Chatrooms.findOneAndUpdate({Roomname: room.Roomname},{ $setOnInsert: {status: true, userNum: 1}}, {new: true, upsert: true}, function(err, doc) {
if(err) console.log(err);
console.log("DOC " + doc)
if(doc.status) {
// FOUND ROOM SATTUS IS TRUE LOGIC
console.log(doc);
// return callback(true)
}
});
Run Code Online (Sandbox Code Playgroud)
上面的查询将返回给我更新或插入的实际文档,但我无法确切地检查它是哪一个。如果我进行更新而不是 findOneandUpdate 我会返回这个
{
ok: 1,
nModified: 0,
n: 1,
upserted: [ { index: 0, _id: 55df883dd5c3f7cda6f84c78 } ]
}
Run Code Online (Sandbox Code Playgroud)
如何从写入结果中返回文档和写入结果或至少返回插入的字段。
截至 2019 年 8 月 8 日(Mongoose 版本 5.6.9),要设置的属性是“rawResult”而不是“passRawResult”:
M.findOneAndUpdate({}, obj, {new: true, upsert: true, rawResult:true}, function(err, d) {
if(err) console.log(err);
console.log(d);
});
Run Code Online (Sandbox Code Playgroud)
输出:
{ lastErrorObject:
{ n: 1,
updatedExisting: false,
upserted: 5d4befa6b44b48c3f2d21c75 },
value: { _id: 5d4befa6b44b48c3f2d21c75, rating: 4, review: 'QQQ' },
ok: 1 }
Run Code Online (Sandbox Code Playgroud)
还要注意,结果是作为第二个参数而不是回调的第三个参数返回的。可以通过 d.value 检索文档。
好吧,我的主要问题是,我无法获取插入的文档的 _id,而无法检查它是否已更新/找到或插入。不过我了解到您可以生成自己的 ID。
id = mongoose.Types.ObjectId();
Chatrooms.findOneAndUpdate({Roomname: room.Roomname},{ $setOnInsert: {_id: id, status: true, userNum: 1}}, {new: true, upsert: true}, function(err, doc) {
if(err) console.log(err);
if(doc === null) {
// inserted document logic
// _id available for inserted document via id
} else if(doc.status) {
// found document logic
}
});
Run Code Online (Sandbox Code Playgroud)
更新
猫鼬 API v4.4.8
passRawResult:如果为 true,则将来自 MongoDB 驱动程序的原始结果作为第三个回调参数传递。
| 归档时间: |
|
| 查看次数: |
5280 次 |
| 最近记录: |