2017-01-14 1 views
0

У меня есть проблемы с Mongoose, и я хочу, чтобы обновить документ в MongoDB используя модуль мангуст, это моя схема:

var User = new mongoose.Schema({ 

     name: String, 
     email: String, 
     list_houses: [{ 
      id_house: String, 
      price: Double 
     }], 
     ... 

    }); 

Когда я хочу, чтобы добавить значение «id_house» без повторения, используя код, приведенный ниже, это не работает

User.update({'name': Name}, 
{$addToSet: {'list_houses': { 'id_house': new_houses , 'price': new_prices } } } , 
    if(err)console.log(err); 
    console.log(result); 
}); 

Когда я выполняю это, результат BD является:

>db.users.find().pretty() 
{ 
    "__v" : 0, 
    "_id" : qweqweqweqweqweqwe, 
    "email" : [email protected], 
    "name" : Richard Smith, 
    "list_houses" : [ ], 
    ..... 
} 

Я тоже использовал $ push, но ни он не работает, я не знаю, в чем проблема с моим кодом сейчас.

+0

пару вещей. У вас нет поля 'name' в найденной коллекции, поэтому обновление не происходит. Другое дело, что вы используете неправильную метку 'id_houses' vs' id_house' для встроенных документов. – Veeram

+0

Спасибо, человек! Это был пример, но знаете ли вы, как решить мою проблему? – CopitoDeNieve97

+0

вместо обратного вызова вы непосредственно написали две строки. Это может вызвать проблемы. Вы используете тот же самый точный фрагмент кода? –

ответ

0

Извините, что сообщило, но $addToSet не работает со значениями Object в массиве.

Вы спрашиваете меня, почему? Логика проста, в JS, когда вы сравниваете строк/номер и т.д. с теми же значениями вы получаете true, но не с помощью объекта

Так {a:1} не равна {a:1}. Конечно, потому что объекты сравниваются со ссылкой.

Теперь решение вашей проблемы, вам придется сделать это вручную

получить список с помощью находки. Проверьте список, если ваш объект существует. Если не добавить в список.

Вы также можете указать детали объекта в запросе находят и просто найти, могут быть документы, не с этими данными (вставляются) в нем

+0

, если это так, тогда '$ push' должен был работать, но в соответствии с OP' $ push' тоже не работает. –

+1

$ addToSet сравнивает. $ push даже не сравнивает и не вставляет в массив. Я думаю, что точная проблема OP –

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

  • Нет связанных вопросов^_^