2014-09-26 2 views
0

Я пытаюсь вставить новый элемент массива в массив объектов с помощью $ addToSet как я не хочу дублирует

var location = { 
    place : req.body.location.Place, 
    postcode : req.body.location.Postcode 
} 
User.update({_id: req.body._id}, 
     {$addToSet: { 'locations' : location}}, function(err, data) { 

}); 

Это вставляет запись каждый раз, когда даже если место и почтовый индекс точно совпадают.

Благодаря

+1

Не могли бы вы показать несколько дублирующихся результатов здесь? – Wizard

ответ

1

Я думаю, что ваши результаты не совпадают (они могут выглядеть одинаково, но есть невидимые символы). Например:

db.a.insert({_id : 1, locs: []}); 

И тогда независимо от того, сколько раз вы addToSet объектов в оргкомитеты массива:

db.a.update({_id : 1},{$addToSet : { 
    locs: {a : 1, b: 2} 
}}) 

только будет добавлен первые один.

Так что взгляните на то, что вы добавляете, а затем попытайтесь сделать попытку раковины монго. Если он работает неправильно, отправьте его здесь. В противном случае более точно посмотрите данные, которые ваше приложение предоставляет монго.

+0

Да ваш пример работает отлично, но я получаю это добавляется к каждому элементу я поместить в массив «_ID»: { «$ OID»: «5428f2fe813693cc26803220» } } Что я полагаю, является тот факт, что массив содержит объект "место": [ { "место": "Лландидны", "почтовый индекс": "ll30", "_id": { "$ OID": "5428f2fe813693cc26803220" } }, ] –

+0

@RobPaddock, скорее всего, mongoose добавляет этот $ oid. Не знаю, почему это делается (не знакомы с мангуста). Просто узнайте, как его удалить. –

+0

Да, мне нужно было создать схему для него и установить _id в false. Спасибо за помощь, хотя попробовал ее в терминале, чтобы упростить отслеживание проблемы. –

1

Спасибо за вашу помощь Salvador Кажется, я использую Мангуст это добавляет _id, мне нужно было создать поддокумент или новую схему для массива и установите _id к ложному

locations : [new mongoose.Schema(
    { 
     place : String, 
     postcode : String 
    }, 
    { _id: false}) 
] 

Все работает fine now

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