2016-02-18 3 views
0

Я пытаюсь обернуть голову вокруг синтаксиса и структуры Mongoose Populate. У меня две схемы. Родитель имеет массив Ребенок ссылок.Mongoose Populate and Search by Array of References

const Parent = new Schema({ 
    name: String, 
    children: [{type: Schema.ObjectId, ref: 'Child'}] 
}); 

const Child = new Schema({ 
    name: String 
}); 

Для заполнения Родителя Я делал это:

Parent 
    .findById(parent.id) 
    .populate('children') 
    .exec((err, parent) => { 
     parent.children = arrayOfInsertedChildDocs; 
     parent.save(); 
    }); 

Ссылки Родительской сохранить, но есть способ запроса для Родители, которые имеют ссылки на определенный Ребенок? Например, все родители, имеющие ссылку на ребенка с идентификатором ObjectId ('xxxxxxxxx') в своем массиве для детей?

Это то, что я пытался, но он не работает.

let query = { "children._id": mongoose.Types.ObjectId(childId) }; 

Parent.find(query, (err, parents) => { 
    //process parents 
}) 

Возможно ли это?

ответ

0

Обдумал это. Запрос на получение Родитель от дочернего идентификатора в вложенном массиве:

Parent 
    .find({"children":ObjectId(child.id)}) 
    .populate("children") 
    .exec((err,parents) => { 
    //process parents 
    }); 
0
You want to search for element in mongodb array set . Suppose u have a document 

{ 
    name :"harry", 
    childen:["10ahhdj20","9ajskjakj9","8aiisu38","2jjaksjah0"] 

} 

so for searching inside a array list you can use this 

db.parents.find({ tags: { $all: [ "10ahhdj20", "812922dd" ] } }) 


You will get all the parents who have this childen