排序mongoose 3.x填充文档的正确语法

时间:2014-12-05 14:30:15

标签: node.js mongodb sorting mongoose mongoose-populate

我在Customer关系中有两个MongoDB集合User1:1。我正在尝试使用Mongoose Population查询这两个文档,并按User.name对其进行排序。

以下任何内容均无效。我的猫鼬是3.8.19。

Customer
    .find({})
    .populate("user", "name email phone")
    .sort({ "name": 1 })
    .exec()

Customer
    .find({})
    .populate("user", "name email phone", null, { sort: { 'name': 1 } } )
    .exec()

Customer
    .find({})
    .populate({
        path: "user",
        select: "name email phone",
        options: { sort: { "name": 1 }}
    }).
    exec()

Customer
    .find({})
    .populate({
        path: "user",
        select: "name email phone",
        options: { sort: [{ "name": 1 }]}
    })
    .exec()

我找到How to sort a populated document in find request?,但对我来说没有成功。

在SQL中会出现类似下面的内容:

SELECT customer.*, user.name, user.email, user.phone FROM customer 
JOIN user ON customer.user_id = user.id
ORDER BY user.name ASC

2 个答案:

答案 0 :(得分:5)

感谢@JohnnyHK in comment,无法对MongoDB和Moongose中的填充字段进行排序。 The only option is to sort the entire array of results manually

  

Mongo没有加入。对填充文档进行排序的唯一方法是todo   在收到所有结果后手动完成。

我通过使用Array.sort([compareFunction])对Mongoose查询产生的输出进行排序来解决这个问题。但是,在对大量数据进行排序时,这可能会对性能产生很大影响。

作为一个副节点,我正在考虑使用node.js移动到关系数据库。

答案 1 :(得分:-1)

我不知道为什么人们说你不能对人口稠密的土地进行排序....

model.findOne({name: request.params.posts})
    .populate('messages', '_id message createDate', null, { sort: { 'createDate': -1 } })
    .exec(function(error, results) {
})

我的模型" posts"在其中有一个ObjectID消息数组,在此处填充并按其创建的dcDate排序。它很棒。