在 mongoose 上减少 mongo 数组子文档长度的有效方法
Efficient way to reduce length of mongo array subdocuments on mongoose
我需要一种方法来减少 mongoose 上 mongo 个子文档的长度。
我有这样的架构:
var schema = new Schema({
field1: {
type: String
},
subdocuments: {
prop1: [{x:String,y:Number}],
prop2: [{x:String,y:Number}]
}
});
然后我使用从使用此模式的模型中查找并传递投影字段。
问题是 prop1 和 prop2 是非常大的数组(大约 1000 个元素)所以我只需要按 y 排序的前 n 个。
你知道只获取我需要的子文档的有效方法吗?
也许使用聚合函数更好?在这种情况下,投影如何工作以仅获取我真正需要的字段?
非常感谢。
d.
尝试这样的事情:
model.find({/* query */})
.slice('subdocuments.prop1', [/* skip */, /* limit */])
.exec(/*callback*/);
或
model.find({/* query */})
.where('subdocuments.prop1').slice(/* limit */)
请尝试通过 aggregation 完成,在展开 prop
数组,按 y
值排序,最终 $limit
第一个 n
元素。
var n = 6;
Document.aggregate([
{$project: {
prop: {$concatArrays: ['$sudocuments.prop1',
'$sudocuments.prop2']}}},
{$unwind: '$prop'},
{$sort: {'prop.y': 1}},
{$limit: n}
])
我需要一种方法来减少 mongoose 上 mongo 个子文档的长度。
我有这样的架构:
var schema = new Schema({
field1: {
type: String
},
subdocuments: {
prop1: [{x:String,y:Number}],
prop2: [{x:String,y:Number}]
}
});
然后我使用从使用此模式的模型中查找并传递投影字段。
问题是 prop1 和 prop2 是非常大的数组(大约 1000 个元素)所以我只需要按 y 排序的前 n 个。
你知道只获取我需要的子文档的有效方法吗?
也许使用聚合函数更好?在这种情况下,投影如何工作以仅获取我真正需要的字段?
非常感谢。 d.
尝试这样的事情:
model.find({/* query */})
.slice('subdocuments.prop1', [/* skip */, /* limit */])
.exec(/*callback*/);
或
model.find({/* query */})
.where('subdocuments.prop1').slice(/* limit */)
请尝试通过 aggregation 完成,在展开 prop
数组,按 y
值排序,最终 $limit
第一个 n
元素。
var n = 6;
Document.aggregate([
{$project: {
prop: {$concatArrays: ['$sudocuments.prop1',
'$sudocuments.prop2']}}},
{$unwind: '$prop'},
{$sort: {'prop.y': 1}},
{$limit: n}
])