11

如何查询大于或小于某个日期的评论...

这是我的带有 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 条评论的帖子)。

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

4

1 回答 1

20

使用点符号进入嵌入式数组文档。例如,使用between和查询Post评论:created_atdate1date2

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

更新

感谢您的编辑;现在我了解到您正在尝试按created_at日期过滤单个帖子的评论。您不能直接使用 MongoDB 查询来执行此操作,但我相信您可以使用 2.2 聚合框架来执行此操作,如果您使用的是该版本。请查看Jira 上有关此功能请求的讨论以获取示例。

于 2012-09-03T14:08:01.623 回答