我有一个findAndModify
MongoDb 请求。mongo 服务器将文档包装在:
{
value: { ... },
lastErrorObject: { updatedExisting: true, n: 1 },
ok: 1
}
有没有办法只从value
密钥中获取对象?
{ ... }
我有一个findAndModify
MongoDb 请求。mongo 服务器将文档包装在:
{
value: { ... },
lastErrorObject: { updatedExisting: true, n: 1 },
ok: 1
}
有没有办法只从value
密钥中获取对象?
{ ... }
获得这种响应的唯一方法是直接运行findAndModify
数据库命令表单,例如:
db.runCommand({
"findAndModify": "newdata",
"query": { "a": 1 },
"update": { "$set": { "b": 2 } },
"new": true,
"upsert": true
})
在 MongoDB shell 和所有驱动程序实现中,这些方法总是用一个集合方法包装,以便在响应中只返回被修改的文档(或原始文档,如果您要求的话)。在 shell 中,包装代码如下所示:
function (args){
var cmd = { findandmodify: this.getName() };
for (var key in args){
cmd[key] = args[key];
}
var ret = this._db.runCommand( cmd );
if ( ! ret.ok ){
if (ret.errmsg == "No matching object found"){
return null;
}
throw "findAndModifyFailed failed: " + tojson( ret );
}
return ret.value;
}
因此,当您实际上只是从集合对象中调用该方法时,您只需获取文档作为响应:
db.newdata.findAndModify({
"query": { "a": 1 },
"update": { "$set": { "b": 2 } },
"new": true,
"upsert": true
})
{ "_id" : ObjectId("5445af1ac745bf5663de72dd"), "a" : 1, "b" : 2 }
这对所有驱动程序都是通用的,其中一些驱动程序显示“findAndModify”的替代名称,例如“findAndUpdate”,并专门区分每个驱动程序的“删除”和“更新”功能。有关其他实现的更多详细信息,请参阅您的语言驱动程序文档,但它们基本上以相同的方式工作。