gpt4 book ai didi

node.js - Mongoose,按引用属性对结果进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:27 25 4
gpt4 key购买 nike

我会尝试尽可能清楚地解决问题。

假设我有两个集合,Col_ACol_B

Col_A 有一个属性,属性 C,它通过 ObjectID 引用我们的其他集合 Col_B

image for visual reference

我想从 Col_A 查询文档,并按 Col_B 中的属性 E 排序。

如果上面的内容太宽泛,那么一个实际的例子是 eBay 等网站上的用户和列表。在此示例中,假设Col_A 为“Listings”,Col_B 为“Users”,属性 C 为“卖家”,属性 E 为“评级”。

查询:获取符合某些条件的所有列表,并按评分最高的卖家排序

这意味着“从列表中获取匹配某些给定条件的所有文档,并根据列表引用的每个用户文档的评级属性对结果进行排序。

如何去做这件事呢?我了解如何通过 Mongoose 应用基本排序逻辑,例如:

Listings.find({"attribute A" : "something"}).sort({"some_field": "uhh"}).exec(function(err, docs) { ... });

,但是我可以嵌套在引用文档的属性中并按这些属性排序吗?我是否需要以某种方式在排序参数或其他参数中应用查询? Mongoose 有这样的能力吗?我查看了 Mongoose 的填充功能,但我无法使任何功能正常工作,而且显然存在一个错误,阻止人们实际使用填充文档进行排序。

Github Issue

如果这个问题已经得到解答,我深表歉意。我一直在挖掘文档、SO 和其他各种网站,但我什么也做不了。提前致谢!

最佳答案

您可以使用 populate 方法来填充卖家,查询将返回如下数组:

[
{
title: 'Listing #1',
seller: {
name: 'John',
rating: 100
}
}
{
title: 'Listing #2',
seller: {
name: 'John',
rating: 20
}
}
]

然后你可以像这样对数据进行排序:

Listings.find({"attribute A" : "something"}).populate('seller').exec(function(err, docs) {
docs.sort(function compare(a, b){
let c = 0;
if (a.seller.rating > b.seller.rating) {
c = 1;
} else if (b.seller.rating > a.seller.rating) {
c = -1;
}
return c;
});
// return or response with docs
});

这可能不是你正在寻找的,但我尝试过:)Mongo 或 Mongoose 不会执行这种sort,因为 populate 方法会进行 2 个查询,而 Mongo 不知道它们之间有任何关系。

关于node.js - Mongoose,按引用属性对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46897735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com