2017-02-08 3 views
1

У меня есть эта коллекция:MongoDB добавить значения в массив, если не существует

{ 
username : "user1", 
arr : [ 
    { 
     name : "test1", 
     times : 0 
    }, 
    { 
     name : "test2", 
     times : 5 
    } 
] 
} 

У меня есть массив с некоторым объектом. Эти объекты имеют имя и значение. Теперь я хочу добавить новые объекты, если мой массив их не содержит. Пример:

У меня есть два объекта с именем «test1» и «test2» уже в коллекции. Теперь я хочу вставить объекты «test2», «test3» и «test4». Он должен только добавить объект «test3» и «test4» к массиву, а не «test2» снова. В этом случае значения времени не делают ничего, они должны иметь значение 0, когда оно получает вставку.

Есть ли способ сделать это с помощью одного запроса?

+0

Будут ли эти объекты, которые вы добавляете имеют 'times' ключ, а? – chridam

+0

@chridam да, но у них есть только «раз: 0». – user6586661

ответ

2

Если вы можете вставить test1, test2, ... один за другим, то вы можете сделать что-то вроде этого.

db.collection.update(
{username : "user1", 'arr.name': {$ne: 'test2'}}, 
{$push: { 
    arr: {'name': 'test2', 'times': 0} 
    } 
}) 

Условие $ne предотвратит обновление, если имя уже присутствует в arr.

+0

Спасибо, что сработает. И еще немного другого вопроса. Могу ли я обновить что-то еще, если $ ne предотвращает вставку моего объекта? – user6586661

+0

@ user6586661 Да, вы можете указать в параметре обновления запроса все, что хотите обновить. –

Смежные вопросы