Mongoose查询嵌套文档或多或少某个日期

时间:2012-09-03 13:52:58

标签: javascript node.js mongodb mongoose

我如何查询大于或小于特定日期的评论......

这是我的Schema with Post模型和Comment模型:

var mongoose = require('mongoose');
var should = require('should');

mongoose.connect("localhost","test_db");

var CommentSchema = new mongoose.Schema({
  content:    {type:String},
  created_at: {type:Date, default:Date.now}

});

var PostSchema = new mongoose.Schema({
  title:    {type:String},
  content:  {type:String},
  comments: [CommentSchema]

    });

var Post = mongoose.model('Post',PostSchema);
var Comment = mongoose.model('Comment',CommentSchema);

var post = new Post({title:"hello world",comments:[{content:"1st comment"},{content:"2nd comment"}]});
// I saved it! and then I query for it

  var id = "5045d5be48af9f040f000002";
  Post.find({ _id:id,
              "comments.created_at":{ $gte:(new Date())}
                },function(err,result){
    console.log(result);
  });

我需要查询嵌入式文档的帮助......

好的我编辑了我的代码以提供更多细节。

这将返回一个空数组。所以我想要的或者我期望的是一个带有空注释数组的帖子。但是通过这个查询,我根本没有收到任何帖子。 (当我用$ lte兑换$ gte时,我得到(显然)有2条评论的帖子。)

但是,我如何根据上面的描述过滤细节呢?

1 个答案:

答案 0 :(得分:19)

使用dot notation覆盖嵌入式阵列文档内部。例如,要在Postcreated_at之间使用date1查询date2条评论:

Post.find({ "comments.created_at": { $gt: date1, $lt: date2 }}, function (err, docs) {
     ...
});

<强>更新

感谢您的编辑;现在我知道您试图按照created_at日期过滤单个帖子的评论。你不能直接使用MongoDB查询,但我相信你可以使用2.2聚合框架,如果你在那个版本。请查看关于Jira的feature request的讨论示例。