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.
Как я могу достичь этой цели?