2012-09-03 38 views
11

Làm thế nào dow tôi truy vấn ý kiến ​​lớn hơn hoặc ít hơn một ngày nào đó ...Mongoose truy vấn lồng nhau tài liệu lớn hơn hoặc ít hơn một ngày nào đó

Dưới đây là Schema của tôi với bài viết mô hình và một mô hình 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); 
    }); 

Tôi cần trợ giúp khi truy vấn tài liệu được nhúng ...

Ok Tôi đã chỉnh sửa mã của mình để cung cấp thêm chi tiết.

Điều này trả về một mảng trống. Vì vậy, những gì tôi muốn hoặc những gì tôi mong đợi là một bài viết với một mảng ý kiến ​​trống. Nhưng với truy vấn này tôi không nhận được một bài đăng nào cả. (khi tôi trao đổi $ gte với $ lte tôi nhận được (rõ ràng) bài đăng với 2 ý kiến ​​của nó).

Nhưng một lần nữa làm thế nào tôi có thể lọc các chi tiết như vậy theo mô tả của tôi ở trên?

Trả lời

19

Sử dụng dot notation để tiếp cận bên trong tài liệu mảng được nhúng. Ví dụ, để truy vấn cho Post ý kiến ​​với một created_at giữa date1date2:

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

CẬP NHẬT

Cảm ơn đã sửa; bây giờ tôi hiểu rằng bạn đang cố gắng lọc nhận xét của bài đăng đơn theo ngày created_at của họ. Bạn không thể làm điều đó trực tiếp với các truy vấn MongoDB, nhưng tôi tin rằng bạn có thể làm điều đó với khung công tác tổng hợp 2.2 nếu bạn đang ở phiên bản đó. Hãy xem các cuộc thảo luận về điều này feature request trên Jira cho các ví dụ.

+0

cảm ơn tuyệt vời và tôi sẽ làm như thế nào cho 1 Bài đăng {_id: 1, "comments.created_a": {$ lt: (ngày mới())} ...? – silverfighter

+0

Phải, bạn chỉ cần thêm thuộc tính '_id: 1' vào đối tượng bộ chọn của mình. – JohnnyHK

+0

Không hoạt động như mong đợi. Tôi đã chỉnh sửa q. để cung cấp thêm chi tiết ... – silverfighter

Các vấn đề liên quan