Node.js 使用Mongoose查找父级和子级都匹配查询的文档
对于MongoDB,我有以下两种Mongoose模式:Node.js 使用Mongoose查找父级和子级都匹配查询的文档,node.js,mongodb,mongoose,querying,Node.js,Mongodb,Mongoose,Querying,对于MongoDB,我有以下两种Mongoose模式: // Parent Schema var parentSchema = mongoose.Schema({ status: { type: String, required: true } child: { type: mongoose.Schema.Types.ObjectId, ref: 'Child', required: true }, ... } //Child schema var childSchem
// Parent Schema
var parentSchema = mongoose.Schema({
status: { type: String, required: true }
child: { type: mongoose.Schema.Types.ObjectId, ref: 'Child', required: true },
...
}
//Child schema
var childSchema = mongoose.Schema({
status: { type: String, required: true }
...
}
我想查找status=published且子文档status=published的所有父文档。以下各项均未给出预期结果:
//This returns no documents
Parent.find({ 'status': 'published' })
.where({ 'child.status': 'published' })
.populate('child')
.exec(function (err, results) {
//This returns no documents
Parent.find({ 'status': 'published' })
.populate('child')
.where({ 'child.status': 'published' })
.exec(function (err, results) {
//This filters by parent status but not child status
Parent.find({ status: 'published' })
.populate({
path: 'child',
match: { 'child.status': 'published' }
})
.exec(function (err, results) {
//This returns no documents
Parent.find(
{status: 'published', 'child.status': 'published'},
{child:{$elemMatch:{status: 'published'}}})
.exec(function (err, results) {
这是正确的方法还是应该使用不同的技术?在MongoDB中,不可能在一个查询中查询多个集合。如果
Child
作为子文档嵌入到Parent
中,那么您可以对Child.status
进行查询,但由于它是一个单独的集合,在Parent
中引用,因此您不能这样做。您可以使用Waterline,它更像ORM