在mongoose中查询子文档

时间:2014-09-07 20:05:57

标签: node.js mongodb mongoose

我是node.js的新手 我正在使用

形式的JSON对象
{ "_id" : ObjectId("540b03ddf1768fe562fbb715"),
"productid" : "men1",
"comments" : [ { "name" : "shiva", "text" : "Haidddsdcccccc", "_id" : ObjectId("540b03dd0570a6261e20a59e"), "date_entered" : ISODate("2014-09-06T12:53:49.658Z") },
{ "name" : "shiva", "text" : "Haidddsdcccccc", "_id" : ObjectId("540cb2be35f8145a2d296ea0"), "date_entered" : ISODate("2014-09-07T19:32:14.827Z") },
{ "name" : "shiva", "text" : "Haidddsdcccccc", "_id" : ObjectId("540cb2c335f8145a2d296ea1"), "date_entered" : ISODate("2014-09-07T19:32:19.456Z") } ] }

我想在特定时间后查询产品的评论

我使用查询

var query=Product.find({"productid":obj.productid,
'comments.date_entered': {$gt: obj.timed}}, {'comments.$': 1})

我在特定时间之后只得到一个对象,即

{
 _id: "540b03ddf1768fe562fbb715"
 comments: [1]
 0:  {
 name: "shiva"
 text: "Haidddsdcccccc"
 _id: "540cb2be35f8145a2d296ea0"
 date_entered: "2014-09-07T19:32:14.827Z"
 }

}

如何在指定时间后获得产品的所有评论?

1 个答案:

答案 0 :(得分:1)

根据我的发现,似乎不是一个很好的方法。解决方法可以做这样的事情:

Product.findOne({productid: PRODUCT_ID}, {comments: 1}, function(err, product) {
    var comments = product.comments.filter(function(comment) {
        return comment.date_entered > DATE;
    });
    ...
})