这听起来像是类似于Mongo $套装。在这种情况下,我想更新文档(更新和/或删除字段)但忽略字段creatorName,保持相同。
示例文件:
{id: 1, firstName: 'Testy', middleName: 'Jim', lastName: 'Shorts', creatorName: 'User1'}
更新至:
{id: 1, firstName: 'Production', lastName: 'Pants', creatorName: 'User1'}
如果我使用set,则creatorName保持不变(good),firstName和lastName更新(good),但middleName不会被删除(bad)。设置限制了在更新期间删除字段的功能。
这可以在查询中完成吗?没有$ unset?
答案 0 :(得分:1)
听起来可能会有更复杂的事情发生,但你只是在评论中暗示它,所以我无法真正对它说话。但是,有一个很好的方法可以用名称的情况做你想做的事情。将名称字段存储为嵌入对象并更新对象:
> db.characters.findOne()
{
"_id" : ObjectId("53f6293de062d5cdbec6553e"),
"creatorName" : "Stan Smalls",
"name" : {
"first" : "Jack",
"middle" : "B",
"last" : "Quick"
}
}
> db.characters.update({ "_id" : ObjectId("53f6293de062d5cdbec6553e") },
{ "$set" : {
"name" : {
"first" : "Sam",
"last" : "Slow"
}
}
})
> db.characters.findOne()
{
"_id" : ObjectId("53f6293de062d5cdbec6553e"),
"creatorName" : "Stan Smalls",
"name" : {
"first" : "Sam",
"last" : "Slow"
}
}
您可以应用于更复杂的案例的更大原则是将需要更新的字段与在嵌入文档中更新相关字段时需要删除的字段组合在一起,这样您就可以$set
文档并有效更新某些字段,同时默认删除某些字段并保留其他字段。