2012-09-03 9 views
11

大きいか小さいマングースクエリネストされた文書は...ダウは、私は特定の日付より大きいまたは小さいコメントを照会方法、特定の日付

ここでは、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); 
    }); 

埋め込みドキュメントをクエリするのに助けが必要です...

私は詳細を与えるために自分のコードを編集しました。

空の配列を返します。だから私が望むもの、または私が期待するのは空のコメント配列を持つ投稿です。しかし、この質問で私は投稿を全く得ていません。 (私が$ gteを$ lteと交換すると、(明らかに)2つのコメントを持つ投稿が得られます)。

また、上記の説明に従って、どのように詳細をフィルタリングすることができますか?

答えて

19

dot notationを使用して埋め込み配列docs内に到達します。例えば、date1date2created_atPostコメントを照会するには:編集用

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

UPDATE

おかげ。今私はあなたが彼らのcreated_at日付で1つの投稿のコメントをフィルタリングしようとしていることを理解しています。 MongoDBのクエリで直接行うことはできませんが、もしあなたがそのバージョンであれば、2.2集約フレームワークで行うことができると思います。例のためのこのfeature requestのJiraの議論を見てください。

+0

おかげさまで、1 Post {_id:1、 "comments.created_a":{$ lt:(new Date())} ...のためにどうすればよいですか? – silverfighter

+0

右のように、セレクタオブジェクトに '_id:1'プロパティを追加するだけです。 – JohnnyHK

+0

期待どおりに動作しません。私はqを編集しました。詳細を与える... – silverfighter

関連する問題