Mongoose查询嵌套文件大于或小于某个date

如何查询评论大于或小于某个date…

这是我的模式与Post模型和一个评论模型:

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); }); 

我需要帮助查询embedded式文档…

好吧,我编辑我的代码给更多的细节。

这将返回一个空数组。 所以我想要的或者我所期望的是一个带有空的comments数组的Post。 但是用这个查询我根本没有得到一个post。 (当我用$ lte交换$ gte的时候,我明显的得到了2条评论)。

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

使用点符号到达embedded式arrays文档内部。 例如,要在date1date2之间查询具有created_atPost注释,请执行以下操作:

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

UPDATE

感谢编辑; 现在我明白你试图通过created_atdate过滤单个post的评论。 你不能直接使用MongoDB查询,但是我相信你可以用2.2的聚合框架来完成,如果你在那个版本的话。 以Jira上的这个function请求的讨论为例。