假设我有一个名为MyCollection
的集合,只有一个文档和一个名为MyObject
的对象
db.MyCollection.findOne()
{ _id: "23r3d2", xyz: "something", abc: "something else" }
为MyObject
{ xyz: "lalala" }
如果你这样做:
db.MyCollection.update( db.MyCollection.findOne() , { $set: MyObject } )
结果MyCollection
是:
{ _id: "23r3d2", xyz: "lalala", abc: "something else" }
与MyObject
不同,原因是$set
会:
然而,它不会
你如何编码以便:
db.MyCollection.findOne()
{ _id: "23r3d2", xyz: "something", abc: "something else" }
会变成:
db.MyCollection.findOne()
{ _id: "23r3d2", xyz: "lalala"}
将此对象作为参数放在某处:
MyObject
{ xyz: "lalala" }
我希望避免明确定义要排除的字段。
答案 0 :(得分:1)
只是做:
db.myCollection.update(db.myCollection.findOne(), MyObject);
它将保持相同的_id但替换整个对象。
顺便说一句,如果您只有一个元素,则可以使用空查询进行搜索:{}
,而不是db.myCollection.findOne()
答案 1 :(得分:0)
当您希望拥有包含单个文档的集合时,我很难找到用例。你可能想要的是findAndModify
,例如:
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
});
这是一个完整的documentation。