【发布时间】:2016-07-22 03:17:57
【问题描述】:
我正在尝试查询属性,该属性是对另一个架构的引用和一些附加数据的数组。为了更好地说明,这里是架构:
var orderSchema = new Schema({
orderDate: Date,
articles: [{
article: {
type: Schema.Types.ObjectId,
ref: 'Article'
},
quantity: 'Number'
}]
}),
Order = mongoose.model('Order', orderSchema);
虽然我设法成功查询参考,即:
Order.find({}).populate('articles.article', null, {
price: {
$lte: 500
}
}).exec(function(err, data) {
for (var order of data) {
for (var article of order.articles) {
console.log(article);
}
}
});
我在查询quantity 属性时遇到了一些问题,即这不起作用:
Order.find({}).where({
'articles.quantity': {
$gte: 5
}
}).populate('articles.article', null, {
/*price: {
$lte: 500
}*/
}).exec(function(err, data) {
for (var order of data) {
for (var article of order.articles) {
console.log(article);
}
}
});
甚至可以基于quantity 进行查询吗?如果是这样,最好的方法是什么?
谢谢!
更新:
问题是,结果要么是一个完整的数组,要么什么都没有(请参阅更新的问题)。我只想获得数量大于或等于 5 的那些记录。使用您(和我的)方法,我要么根本没有记录(如果我设置 $gte: 5001)或两个记录(如果我设置 $gte: 5000)
{
"_id": ObjectId('56fe76c12f7174ac5018054f'),
"orderDate": ISODate('2016-04-01T13:25:21.055Z'),
"articles": [
{
"article": ObjectId('56fe76c12f7174ac5018054b'),
"quantity": 5000,
"_id": ObjectId('56fe76c12f7174ac50180551')
},
{
"article": ObjectId('56fe76c12f7174ac5018054c'),
"quantity": 1,
"_id": ObjectId('56fe76c12f7174ac50180552')
}
],
"__v": 1
}
【问题讨论】:
-
您能解释一下为什么查询
articles.quantity不起作用吗?您可以在问题中添加任何输出吗? -
我删除了错误的答案。您可以检查查询部分是否确实返回了您想要的结果,而无需填充?如果它返回整个数组,则查询中存在问题,因为填充对查询结果起作用。
-
你的问题和here一样吗?
-
@MarioTrucco 它“有点”是,除了这里的概念是一些数据驻留在另一个集合中,并且希望
.populate()和“过滤”这些结果。我几乎搁置了(实际上我做了,但被删除了),因为这实际上具有“两个”长期存在的答案的元素,但实际上是以它自己的“独特”方式。所以恕我直言,它有点独立。
标签: node.js mongodb mongoose mongodb-query aggregation-framework