对 mongoose 3.x 填充文档进行排序的正确语法
Posted
技术标签:
【中文标题】对 mongoose 3.x 填充文档进行排序的正确语法【英文标题】:The correct syntax for sorting mongoose 3.x populated document 【发布时间】:2015-02-03 18:06:34 【问题描述】:我在 1:1
关系中有两个 MongoDB 集合 Customer
和 User
。我正在尝试使用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
【问题讨论】:
您无法在填充字段上对文档进行排序。 ***.com/questions/19428471/… 【参考方案1】:我不知道为什么人们说你不能对填充的字段进行排序....
model.findOne(name: request.params.posts)
.populate('messages', '_id message createDate', null, sort: 'createDate': -1 )
.exec(function(error, results)
)
我的模型“发布”的地方有一个 ObjectID 消息数组,在这里填充并按其 createDate 排序。效果很好。
【讨论】:
它可能会按每个帖子而不是所有结果对消息进行排序。您的解决方案与我的第二个示例非常相似,该示例无法按填充文档对整个结果进行排序。 我不知道为什么这被否决了。这个答案有效。不要忘记添加null,否则将不起作用。【参考方案2】:感谢@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 迁移到关系数据库。
【讨论】:
以上是关于对 mongoose 3.x 填充文档进行排序的正确语法的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性