MongoDB:使用 $or 运算符按条件顺序查询时如何对文档进行排序?

Posted

技术标签:

【中文标题】MongoDB:使用 $or 运算符按条件顺序查询时如何对文档进行排序?【英文标题】:MongoDB: how can I sort documents when querying with $or operator by conditions order? 【发布时间】:2016-10-02 07:43:36 【问题描述】:

有以下 Mongoose 查询:

User.find($or: [
     'expertData.category':  $in: categoryIds  ,
     'expertData.areas.category':  $in: categoryIds  
])
.limit(perPage)
.skip(perPage * page);

字段'expertData.category''expertData.areas.category'Category 集合的引用ID,具有以下架构:

var CategorySchema = new Schema(
    name: type: String,
    desc: type: String,
    src : type: String,
    updated: 
        type: Date,
        default: Date.now
    
);

有没有办法以这种方式对文档进行排序,所以在结果数组的开头将是与$or 运算符中的第一个条件匹配的文档(即 '_expertData.category': $in: categoryIds ),然后才是所有匹配的文档$or 运算符中的第二个条件(即 '_expertData.areas.category': $in: categoryIds )?

【问题讨论】:

【参考方案1】:

是的,您分别执行命令并将第二个查询的结果附加到第一个查询的结果中。

【讨论】:

是的,这是可行的解决方案,但对我来说不是。我将使用.limit.skip 对结果进行分页。抱歉,我在最初的问题中没有提到这一点。我现在已经更新了。

以上是关于MongoDB:使用 $or 运算符按条件顺序查询时如何对文档进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB高级操作

MongoDB查询操作

[转]mongodb 查询条件:关系运算符"$lt", "$lte", "$gt", "$gte", "$ne

MySQLDQL之条件查询

对 MongoDB $in 查询的响应顺序? [复制]

对 MongoDB $in 查询的响应顺序? [复制]