MongoDB位置upsert,更新回调

时间:2014-11-20 22:08:20

标签: mongodb callback upsert positional-operator

我的收藏中有以下结构:

{
    "_id" : {
        "id_1"    : "1",
        "id_2" : "1",
        "version" : "2.0"
    },
    "value" :
    [
        {
            "date"  :   ISODate("2014-10-01T00:00:00.000Z"),
            "val_1" : 0,
            "val_2" : 0,
            "count" : 0
        }
    ]
}

主要任务是通过在以下查询中选择它来增加val_1,val_2值:

db.runCommand({
    findAndModify: "coll",
    query  : {  "_id.id_1" : "1", "_id.id_2" : "1", "_id.version" : "2.0", value: { $elemMatch: { date: ISODate("2014-10-01T00:00:00.000Z") } } },
    update : { $inc:  {
        "value.$.val_1" : 1,
        "value.$.val_2" : 1,
        "value.$.count" : 1
    }
    }
});

如果存在匹配,它可以正常工作,否则我会遇到以下异常:

  

"例外:位置操作员未找到所需的匹配项   查询。未更新的更新:值。$。val_1"

第一个想法是尝试查找,如果不存在 - 创建,否则更新。经过一些研究后,我发现了以下示例(来自NodeJS and MongoDB FindAndModify() need remove or update):

collection.findAndModify(
    { "_id": "auto" },
    { "$inc": { "bill": 1 } },
    { "remove": true },
    function(err,doc) {
    // work here
    }
);

但回调在我的MongoDB 2.6.3版本中不起作用。

我如何实现这个目标?

0 个答案:

没有答案