筛选、排序、限制、跳过子文档 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;
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;