const A = mongoose.Schema({
...
bs: [B.schema],
...
});
所以基本上我有两种模式,一种是另一种的子文档。 从我的数据表中我得到了参数。例如过滤器,页面限制,页面,排序...
我需要做的是,创建一个查询,该查询将使用A模式中的_id获取其所有B模式,并始终对参数进行排序,限制,跳过和过滤。我发送的
我尝试了类似的方法
b = await A.find({'_id' : idA},
{ 'bs' :
{ $slice: [ offset * limit, limit ]
}
});
它正在工作,但是我仍然不知道如何过滤和排序。 因此,如果有人有任何想法欢迎分享。
P.S对不起,英语不好 问候, 塞勒斯
答案 0 :(得分:1)
您要执行的操作不是find
符合您的数组条件的文档,而是修改结果以适应您的需求。您可以通过两种方法来完成此操作,具体取决于您希望在何处完成处理:
聚合管道是确定文档进行查询和转换的一系列步骤。 一个未经测试的粗略示例(可能在语法上错误)是:
A.aggregate([
{ $match: { _id: "id" }},
{ $project: {
bs: {
$filter: { input: "$bs" , as: "filteredBs" , cond: { /* conditions object */} }},
}
},
{ $slice: ["$filteredBs", offset * limit, limit ] }
/* ... */
]);
在这里,您仅受javascript及其数组功能的限制。
const found = A.findById('id');
const bs = A.bs.filter( /* filter function */ ).slice() // ... whatever you want.
A.bs = bs;
return A;