Node.js Mongoose,按引用属性对结果排序
我会尽量清楚地处理这个问题 假设我有两个收藏,colu A和colu B Colu_A有一个属性,即属性C,通过ObjectID引用我们的另一个集合Colu B 我想查询A列中的文档,并在B列中按属性E排序 一个实际的例子是,如果上面的内容过于宽泛,那么像eBay这样的网站上的用户和物品就是一个例子。对于本例,假设列A为“列表””,列B为“用户””,属性C为“卖方”,属性E为“评级” 查询:抓取符合某些条件的所有物品,按评分最高的卖家排序 这意味着“从符合某些给定条件的列表中抓取所有文档,并根据每个用户的评级属性对结果进行排序记录列表引用 我知道如何通过mongoose应用基本的排序逻辑,例如:Node.js Mongoose,按引用属性对结果排序,node.js,mongodb,sorting,mongoose,Node.js,Mongodb,Sorting,Mongoose,我会尽量清楚地处理这个问题 假设我有两个收藏,colu A和colu B Colu_A有一个属性,即属性C,通过ObjectID引用我们的另一个集合Colu B 我想查询A列中的文档,并在B列中按属性E排序 一个实际的例子是,如果上面的内容过于宽泛,那么像eBay这样的网站上的用户和物品就是一个例子。对于本例,假设列A为“列表””,列B为“用户””,属性C为“卖方”,属性E为“评级” 查询:抓取符合某些条件的所有物品,按评分最高的卖家排序 这意味着“从符合某些给定条件的列表中抓取所有文档,并根
Listings.find({"attribute A" : "something"}).sort({"some_field": "uhh"}).exec(function(err, docs) { ... });
,但我可以嵌套在引用文档的属性中并按这些属性进行排序吗?我是否需要在排序参数或其他方面应用查询?Mongoose是否能够实现类似的功能?我查看了Mongoose的填充功能,但我无法使任何功能正常工作,而且显然存在一个让人们不愿意实际使用的错误使用填充的文档进行排序
如果这个问题已经得到回答,我很抱歉。我一直在翻文档,所以,和其他各种网站,但我什么都做不到。提前谢谢!您可以使用填充方法填充卖家,查询将返回如下数组:
[
{
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
});
然后您可以按如下方式对数据进行排序:
[
{
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不会进行这种
排序
,因为填充
方法进行2次查询,Mongo不知道它们之间有任何关系。您可以使用填充方法填充卖家,查询将返回如下数组:
[
{
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
});
然后您可以按如下方式对数据进行排序:
[
{
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不会进行这种
排序
,因为populate
方法会进行两次查询,Mongo不知道它们之间有任何关系。是的,这就成功了。糟糕的是,没有一个更优雅、基于Mongoose的解决方案。哦,这还不算太糟糕。populate
方法进行了两次查询,Mongoo不知道它们之间有任何关系。糟糕的是,没有一个更优雅、基于猫鼬的解决方案。哦,还不错。谢谢!