1

我有以下 2 个用于 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 childSchema = mongoose.Schema({
    status: { type: String, required: true }
    ...
}

我想找到所有状态=已发布以及子文档状态=已发布的父文档。以下都没有给出预期的结果:

//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) {

这是正确的方法还是应该使用不同的技术?

4

2 回答 2

2

在 MongoDB 中,不可能在单个查询中查询多个集合。如果Child作为子文档嵌入,Parent那么您可以对其进行查询,child.status但由于它是一个单独的集合,因此Parent您不能这样做。

于 2014-02-20T09:59:11.637 回答
0

你可以使用 Waterline,它更像 ORM。

于 2015-12-03T01:26:18.797 回答