The correct syntax for sorting mongoose 3.x populated document

巧了我就是萌 提交于 2019-11-30 21:20:47

问题


I have two MongoDB collections Customer and User in 1:1 relationship. I'm trying to query both documents using Mongoose Population and sort them by User.name.

Nothing below is working. My Mongoose is 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()

I found How to sort a populated document in find request?, but no success for me.

It would be something like below in SQL:

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

回答1:


Thanks to @JohnnyHK in comment, it is not possible to sort the populated fields in MongoDB and Moongose. The only option is to sort the entire array of results manually.

Mongo has no joins. The only way to sort populated documents is todo it manually after you receive all results.

I solved this by using Array.sort([compareFunction]) to sort the output resulted from Mongoose query. However, it could be a big impact on performance when sorting a large set of data.

As a side node, I'm considering to move to a relational database with node.js.




回答2:


I don't know why people are saying you can't sort a populated field....

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

Where my model "posts", has a ObjectID messages array in it, that is populated here and sorted by it's createDate. It works great.



来源:https://stackoverflow.com/questions/27318115/the-correct-syntax-for-sorting-mongoose-3-x-populated-document

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!