MongoDB: Обновить оператор help, добавить счетчик, равный длине массива в объекте? - PullRequest
1 голос
/ 30 марта 2011

Это объект:

{ "_id" : "c12345", 
  "arr" : [
        {
                "i" : 270099850,
                "a" : 772,

        },
        {
                "i" : 286855630,
                "a" : 622,

        }
] }

Это утверждение, которое добавляет еще один элемент к "arr":

db.testc.update({"_id" : "c12345"},{$pushAll:{"f":[{"i":123,"a":456456}]},   {"safe":false,"upsert" : true}}

ОСНОВНОЕ ТРЕБОВАНИЕ: Я хочу одно утверждение вроде:

 db.testc.update({"_id" : "c12345"},{$pushAll:{"f":[{"i":123,"a":456456}]},
             $set:{"n":"this.f.lenth" }, {"safe":false,"upsert":true}) 

Который добавит или изменит ключ "n" и поставит целое число в качестве значения, равного длине обр. Я хочу сделать это в том же заявлении, то есть без поиска.

В идеале оператор должен обновлять его до конечной длины "arr" (или даже начальный будет работать, если добавить к нему 1)

1 Ответ

1 голос
/ 30 марта 2011

Нельзя написать что-то вроде this.f.length.

{"$ pushAll": {"f": [{"i": 123, "a": 456456}]}, "$ set": {"n": 2}}

Вы можете использовать $ inc для увеличения n (значение приращения должно быть равно длине выдвигаемого массива) при каждом обновлении:

{ "$pushAll" : { "f" : [{ "i" : 123, "a" : 456456 }] }, "$inc" : { "n" : 1 } }

Не нужно использовать find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...