Mongoose 按引用数组填充和搜索
Mongoose Populate and Search by Array of References
我正在努力思考 Mongoose Populate 语法和结构。我有两个模式。 Parent 有一个 Child 引用数组。
const Parent = new Schema({
name: String,
children: [{type: Schema.ObjectId, ref: 'Child'}]
});
const Child = new Schema({
name: String
});
要填充 Parent 我一直在这样做:
Parent
.findById(parent.id)
.populate('children')
.exec( (err, parent) => {
parent.children = arrayOfInsertedChildDocs;
parent.save();
});
Parent 引用保存了,但是有没有办法查询 Parents 引用了某个 Child?例如,所有在其子数组中引用 ID 为 ObjectId('xxxxxxxxx') 的子对象的父对象?
这是我一直在尝试的方法,但没有用。
let query = { "children._id": mongoose.Types.ObjectId(childId) };
Parent.find(query, (err, parents) => {
//process parents
})
这可能吗?
您想在 MongoDB 数组集中搜索元素。假设你有一个文档。
{
name :"harry",
childen:["10ahhdj20","9ajskjakj9","8aiisu38","2jjaksjah0"]
}
所以要在数组列表中搜索,您可以使用它。
db.parents.find( { tags: { $all: [ "10ahhdj20", "812922dd" ] } } )
您将得到所有 parents 拥有这些 children 的人。
想通了。从嵌套数组中的子 ID 获取 Parent 的查询是:
Parent
.find({"children":ObjectId(child.id)})
.populate("children")
.exec((err,parents) => {
//process parents
});
我正在努力思考 Mongoose Populate 语法和结构。我有两个模式。 Parent 有一个 Child 引用数组。
const Parent = new Schema({
name: String,
children: [{type: Schema.ObjectId, ref: 'Child'}]
});
const Child = new Schema({
name: String
});
要填充 Parent 我一直在这样做:
Parent
.findById(parent.id)
.populate('children')
.exec( (err, parent) => {
parent.children = arrayOfInsertedChildDocs;
parent.save();
});
Parent 引用保存了,但是有没有办法查询 Parents 引用了某个 Child?例如,所有在其子数组中引用 ID 为 ObjectId('xxxxxxxxx') 的子对象的父对象?
这是我一直在尝试的方法,但没有用。
let query = { "children._id": mongoose.Types.ObjectId(childId) };
Parent.find(query, (err, parents) => {
//process parents
})
这可能吗?
您想在 MongoDB 数组集中搜索元素。假设你有一个文档。
{
name :"harry",
childen:["10ahhdj20","9ajskjakj9","8aiisu38","2jjaksjah0"]
}
所以要在数组列表中搜索,您可以使用它。
db.parents.find( { tags: { $all: [ "10ahhdj20", "812922dd" ] } } )
您将得到所有 parents 拥有这些 children 的人。
想通了。从嵌套数组中的子 ID 获取 Parent 的查询是:
Parent
.find({"children":ObjectId(child.id)})
.populate("children")
.exec((err,parents) => {
//process parents
});