如何在mongoDB中组合使用$ unset和$ set

use*_*881 22 mongodb

我有这样的记录:

{
    "Date" : ISODate("2013-06-28T18:30:00Z"),
    "Details" : {
            "Amount1" : -200,
            "Amount2" : 2800,
            "Amount3" : -100
    },
    'NID' : 'T123RT',
    'PID' : 'P123RT',
    "SettAmount" : 2500,
    "SettStatus" : "completed",
    "Status" : "completed",
    "StoreID" : "51ea54279d867b040b000008",
    "_id" : ObjectId("51ea54279d867b040b000013")
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试更新文档,如:

db.settlements.update({
    'StoreID' : "51ea54279d867b040b000008",
    'Date' : ISODate("2013-06-28T18:30:00Z")
}, {
    $unset : {
        'NID' : "",
        'PID' : ""
    }
    }, {
    $set : {
        'SettStatus' : 'start',
        'Status' : 'pending'
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,只有未设置的操作才能成功.以上查询中的错误是什么........?

Rom*_*kar 43

你有太多的大括号,这是正确的命令:

db.settlements.update(
    {
        'StoreID': "51ea54279d867b040b000008",
        'Date': ISODate("2013-06-28T18:30:00Z")
    }, 
    {
        $unset: {
            'NID' : "",
            'PID' : ""
        }, 
        $set: {
            'SettStatus': 'start',
            'Status': 'pending'
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

在你的命令中,你<options>在更新命令中使用$ set ,而不是作为其中一部分<update>

http://docs.mongodb.org/manual/core/update/#crud-update-update

  • mongodb 首先执行什么?`$set` 还是 `$unset`?如果在两个操作中更新相同的字段怎么办? (4认同)
  • @Anmol Mongodb 将同时执行 $set 和 $unset,如果在两个操作中更新相同的字段,mongodb 将抛出一个错误,例如 - `更新路径 'field_name' 会在 'field_name' 处创建冲突` (3认同)