Позиционное обновление MongoDB, обратные вызовы обновления

У меня есть следующая структура в моей коллекции:

{
    "_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 и MongoDB FindAndModify( ) нужно удалить или обновить ):

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

Но обратные вызовы не будут работать в моей версии MongoDB 2.6.3.

Как я могу достичь этой описанной цели?


person deividaspetraitis    schedule 20.11.2014    source источник
comment
Я не понимаю, что вы имеете в виду о обратных вызовах. Вы используете драйвер узла или оболочку mongo? Если вы используете оболочку, обратного вызова нет. findAndModify вернет документ.   -  person wdberkeley    schedule 21.11.2014
comment
Да, я использую оболочку mongo. Итак, если нет обратных вызовов, какие могут быть обходные пути? Просто попробовать отловить ошибки?   -  person deividaspetraitis    schedule 21.11.2014
comment
Вы нашли какое-либо решение для этого?   -  person rkatkam    schedule 18.04.2015