筛选、排序、限制、跳过子文档 mongoose

Filter, sort, limit, skip subdocument mongoose

const A = mongoose.Schema({
...
    bs: [B.schema],
...

 });

基本上我有两个架构,一个是另一个的子文档。 从我的数据表中我得到参数。例如过滤器、页数限制、页面、排序...

我需要做的是,创建将使用 A 架构中的 _id 的查询,获取他的所有 B 架构,并始终使用参数进行排序、限制、跳过、过滤。我发送的

我试过这样的东西

b = await A.find({'_id' : idA}, 
    { 'bs' : 
        { $slice: [ offset * limit, limit ]
        }
    }); 

它正在运行,但我仍然不知道如何过滤和排序。 所以如果有人有什么想法欢迎分享。

P.S抱歉英语不好 问候, 萨利什

您要做的不是 find 满足您的数组条件的文档,而是修改结果以满足您的需要。您可以使用两种方法来执行此操作,具体取决于您希望在何处完成处理:

1。 Use MongoDB Aggregation。处理在数据库中完成。

聚合管道是您确定文档经过查询和转换的一系列步骤。 一个粗略的未经测试(并且可能在语法上是错误的)示例是:

A.aggregate([
  { $match: { _id: "id" }},
  { $project: {
      bs: {
        $filter: { input: "$bs" , as: "filteredBs" , cond: { /* conditions object */}  }},
     } 
  },    
  { $slice: ["$filteredBs", offset * limit, limit ] }
  /* ... */
]);

2。通过 Id 获取文档并在您的服务器上处理数组。

此处您仅受 javascript 及其数组功能的限制。

const found = A.findById('id');
const bs = A.bs.filter( /* filter function */ ).slice() // ... whatever you want.
A.bs = bs;
return A;