1

我有一个项目架构和集合以及一个列表架构和集合。

我目前与创建列表分开创建项目......但每个项目都引用一个列表 objectId。

var ListSchema = new Schema({
    name    : { type: String, required: true, trim: true }
  , user  : { type: Schema.ObjectId, ref: 'User', index: true }
  , description : { type: String, trim: true }
});


var ItemSchema = new Schema({ 
    name    : { type: String, required: true, trim: true }
  , description: { type: String, trim: true }
  , list  : { type: Schema.ObjectId, ref: 'List', index: true }
});

我想知道是否可以获得一个列表并将该列表的项目加载到该实例的顶部:

所以我可以这样做:

list.items获取视图中的所有项目。

//routes/list.js
List.find({ user: req.params.userid }, function(err, lists){
   //i want to populate list.items here
   res.render('/lists', { lists: lists });
});

//views/list.ejs
<% lists.forEach(function(list){ %>
    List has <%= list.items.length %> items in it
<% }) %>
4

1 回答 1

1

在我看来,您希望对list字段等于列表 id 的所有项目运行查询。那是对的吗?

在这种情况下,类似

lists.forEach(function(list){
   list.items = []
   Item.find( { list:list._id }, function(err, items) {
       items.forEach(function(item) {
           list.items.add(item);
       });
   });
});

可能是你想要的。

编辑

啊,我明白了。如何创建一个包含您找到的列表的所有 _id 的列表,然后对 Item 集合执行 $in 查询以获取其list属性是您找到的列表之一的所有项目?这只是对 MongoDB 的一次调用以获取所有项目,您可以将res.render调用放在其回调中。

注意:回调中必须有一些额外的逻辑来解析返回的项目并按列表对它们进行排序。

这是 $in 的文档

于 2012-10-03T21:12:08.070 回答