Mongo根据另一个集合中的列表查找文档

时间:2014-10-03 18:37:14

标签: mongodb sorting mongoose aggregation-framework

让我们说我有以下架构:

  • ID
  • 名称

客户

  • ID
  • 名称

出租

  • book_id
  • CUSTOMER_ID
  • rentedAt

我想获得一个客户租用的图书清单,按租金日期排序。这样做的愚蠢方法是获得一份排序的租金清单,然后对该清单中的每本书执行一次“查找”。

必须有更好的方法,可能使用单个查询。随意提出架构更改,例如在Book或Customer中嵌入一组“Rent”。

由于

1 个答案:

答案 0 :(得分:1)

使用Mongoose对参考population的支持来有效地执行此操作:

Rent.find({customer_id: custid})
    .sort({rentedAt: 1})
    .populate('book_id')
    .exec(function(err, rents) {
        // The book_id property of each rents doc contains its referenced book doc.
    });

Mongoose会首先执行Rent查询,然后通过第二个查询跟进,以获取所有引用的书籍。

确保您的Rent架构将book_id定义为适当的参考,如:

book_id: {type: Schema.Types.ObjectId, ref: 'Book' }