Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo更新,但不包括某些字段_Mongodb_Mongodb Query_Mongodb Php_Mongodb Update - Fatal编程技术网

Mongodb Mongo更新,但不包括某些字段

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

这听起来像是Mongo$集。在这种情况下,我希望更新文档(更新和/或删除字段),但忽略字段creatorName,保持不变

示例文件:

{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不直接支持的相当复杂的操作。嘿,这是解决此问题的一个非常好的答案,也是处理此问题的聪明方法。不幸的是,我现在无法实现它,因为我已经有太多文档,而代码的其他部分依赖于我当前的格式。重写会花费太长时间。如果我能从头开始设计,肯定会很有用。