Mongodb Mongo更新,但不包括某些字段
这听起来像是Mongo$集。在这种情况下,我希望更新文档(更新和/或删除字段),但忽略字段creatorName,保持不变 示例文件:Mongodb Mongo更新,但不包括某些字段,mongodb,mongodb-query,mongodb-php,mongodb-update,Mongodb,Mongodb Query,Mongodb Php,Mongodb Update,这听起来像是Mongo$集。在这种情况下,我希望更新文档(更新和/或删除字段),但忽略字段creatorName,保持不变 示例文件: {id: 1, firstName: 'Testy', middleName: 'Jim', lastName: 'Shorts', creatorName: 'User1'} 更新至: {id: 1, firstName: 'Production', lastName: 'Pants', creatorName: 'User1'} 如果我使用set,cre
{id: 1, firstName: 'Testy', middleName: 'Jim', lastName: 'Shorts', creatorName: 'User1'}
更新至:
{id: 1, firstName: 'Production', lastName: 'Pants', creatorName: 'User1'}
如果我使用set,creatorName保持不变(良好),firstName和lastName更新(良好),但middleName不会被删除(不良)。Set限制在更新期间删除字段的能力
这可以在查询中完成吗?如果没有$unset?听起来可能会有更复杂的事情发生,但你只是在评论中暗示了这一点,所以我无法真正与之交谈。但是,有一种很好的方法可以处理名称情况。将名称字段存储为嵌入对象并更新对象:
> 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和$unset-很高兴知道,除非在某些情况下,我不知道要$unset哪些字段。我只知道新文档的样子,我需要忽略某些字段。可以查找上一个文档并进行比较,但会降低性能。是的-听起来您正在尝试执行mongo不直接支持的相当复杂的操作。嘿,这是解决此问题的一个非常好的答案,也是处理此问题的聪明方法。不幸的是,我现在无法实现它,因为我已经有太多文档,而代码的其他部分依赖于我当前的格式。重写会花费太长时间。如果我能从头开始设计,肯定会很有用。