我在Customer
关系中有两个MongoDB集合User
和1: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
答案 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排序。它很棒。