2015-01-06 2 views
0

Mongoose (v3.8) + Node.jsMongoose список ссылок заселить

У меня есть модель под названием 'Продукты', который имеет это поле:

upvoted_by: [{ 
    user_id: { type: Schema.ObjectId, ref: 'Users' }, 
    timestamp: { type: Date } 
    }] 

И в Users модель имеет кучу другие поля.

Чтобы добавить upvote, я делаю это:

product.upvoted_by.push({ 
    user_id: req.user, 
    timestamp: new Date() 
}); 

Я пытаюсь заполнить upvoted_by.user_id поле так, что он содержит соответствующие пользовательские данные.

Я попробовал это, но это не похоже на работу:

// product (= a document) has been found before 
product.populate('upvoted_by.user_id', { 
    select: 'username' // username is a field in the Users model 
}, function(err, doc) { 
    console.log(JSON.stringify(doc)); 
}); 

Любая идея, что происходит не так и как это исправить?

ответ

0

я в конечном итоге делает это:

product.populate({ 
    path: 'upvoted_by.user_id', 
    select: 'username profile.picture profile.name'}, function(err, doc) { 
    console.log(JSON.stringify(doc.upvoted_by)); 
}); 
2

В соответствии с документами должен работать следующий синтаксис: select - это атрибут Object, переданный методу populate.

product.populate({path:"upvoted_by.user_id", 
        select:"username"}).exec(function(err, doc) { 
    console.log(err); 
    console.log(JSON.stringify(doc)); 
}); 
+0

мне пришлось изменить несколько вещей, но это достаточно близко! –

+1

@ KaranGoel, дружелюбный FYI: если кто-то тратит время, чтобы помочь вам, но вы по существу публикуете небольшую настройку и соглашаетесь с тем, что в качестве ответа на их ответ (который действительно решает проблему) это не вдохновляет людей помочь вам (или другие) в будущем. –

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