Подтвердить что ты не робот

Вложения Mongoose вложенные документы больше или меньше определенной даты

Как dow я запрашиваю комментарии больше или меньше определенной даты...

Вот моя схема с моделью 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);
  });

Мне нужна помощь при запросе встроенных документов...

Хорошо, я отредактировал мой код, чтобы дать более подробную информацию.

Возвращает пустой массив. Итак, что я хочу или что я ожидаю, это Post с пустым массивом комментариев. Но с этим запросом я вообще не получаю сообщение. (когда я обмениваю $gte с $lte, я получаю (очевидно) сообщение со своими 2 комментариями).

Но как я могу отфильтровать детали так, согласно моему описанию выше?

4b9b3361

Ответ 1

Используйте точечную нотацию, чтобы попасть внутрь встроенных документов. Например, для запроса комментариев Post с помощью created_at между date1 и date2:

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

UPDATE

Спасибо за редактирование; теперь я понимаю, что вы пытаетесь отфильтровать комментарии одного сообщения по дате created_at. Вы не можете сделать это напрямую с помощью запросов MongoDB, но я считаю, что вы можете сделать это с помощью структуры агрегации 2.2, если вы в этой версии. Взгляните на обсуждение этого запроса функции на примере Jira.