如何通过使用 Mongoose 查询子文档来查找父文档?
How to find parent doc by querying subdocument using Mongoose?
在下面的示例中,如何找到特定成员 ID 具有 Membership
(子文档)的 Account
(父)文档?我尝试同时使用 $elemMatch
和直接查询对象。
注意:
两个模式都有一个已删除的标志字段 (dd
)。如果设置了此字段,则记录已被删除,不应 returned:
var mongoose = require('mongoose')
var membershipSchema = new mongoose.Schema({
m : { type: mongoose.Schema.ObjectId, ref: 'member' }, // Member
b : { type: Date, required: true }, // Begin Date
e : { type: Date }, // End Date
dd : { type: Date }, // Deleted Date
dm : { type: mongoose.Schema.ObjectId, ref: 'member' } // Deleted By Member
});
var accountSchema = new mongoose.Schema({
n : { type: String, trim: true }, // Display Name
m : [ membershipSchema ], // Membership List
dd : { type: Date }, // Deleted Date
dm : { type: mongoose.Schema.ObjectId, ref: 'member' } // Deleted By Member
});
var accountModel = mongoose.model('account', accountSchema);
module.exports = accountModel;
我想要 return 所有 Account
文档,有或没有 Membership
子文档。但是,执行查询时,我将不知道有关 Account
的任何信息。
这就是我正在尝试的:
var query = {
m : {
$elemMatch: {
m : req.appData.member.id,
dd : { $exists: false }
}
},
dd : { $exists: false }
};
Account.find(query, function (err, accounts) {
// Do something
});
我已经测试了好几次,上面的语法是正确的。使用所示的 query
对象将导致返回所有顶级 Account
对象,其中成员的 ID 存在于子文档中。并且,通过检查 dd
字段(您的删除标志)是否存在(或不存在),只会返回未标记为 "deleted" 的对象。
以防万一您需要调整您的原始问题。这是我们正在讨论的正确语法:
var query = {
m : {
$elemMatch: {
m : req.appData.member.id,
dd : { $exists: false }
}
},
dd : { $exists: false }
};
Account.find(query, function (err, accounts) {
// accounts will contain an array of valid
// items and will be populated with the
// subdocuments.
});
在下面的示例中,如何找到特定成员 ID 具有 Membership
(子文档)的 Account
(父)文档?我尝试同时使用 $elemMatch
和直接查询对象。
注意:
两个模式都有一个已删除的标志字段 (dd
)。如果设置了此字段,则记录已被删除,不应 returned:
var mongoose = require('mongoose')
var membershipSchema = new mongoose.Schema({
m : { type: mongoose.Schema.ObjectId, ref: 'member' }, // Member
b : { type: Date, required: true }, // Begin Date
e : { type: Date }, // End Date
dd : { type: Date }, // Deleted Date
dm : { type: mongoose.Schema.ObjectId, ref: 'member' } // Deleted By Member
});
var accountSchema = new mongoose.Schema({
n : { type: String, trim: true }, // Display Name
m : [ membershipSchema ], // Membership List
dd : { type: Date }, // Deleted Date
dm : { type: mongoose.Schema.ObjectId, ref: 'member' } // Deleted By Member
});
var accountModel = mongoose.model('account', accountSchema);
module.exports = accountModel;
我想要 return 所有 Account
文档,有或没有 Membership
子文档。但是,执行查询时,我将不知道有关 Account
的任何信息。
这就是我正在尝试的:
var query = {
m : {
$elemMatch: {
m : req.appData.member.id,
dd : { $exists: false }
}
},
dd : { $exists: false }
};
Account.find(query, function (err, accounts) {
// Do something
});
我已经测试了好几次,上面的语法是正确的。使用所示的 query
对象将导致返回所有顶级 Account
对象,其中成员的 ID 存在于子文档中。并且,通过检查 dd
字段(您的删除标志)是否存在(或不存在),只会返回未标记为 "deleted" 的对象。
以防万一您需要调整您的原始问题。这是我们正在讨论的正确语法:
var query = {
m : {
$elemMatch: {
m : req.appData.member.id,
dd : { $exists: false }
}
},
dd : { $exists: false }
};
Account.find(query, function (err, accounts) {
// accounts will contain an array of valid
// items and will be populated with the
// subdocuments.
});