在 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 */)

猫鼬切片:http://mongoosejs.com/docs/api.html#query_Query-slice

请尝试通过 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}
  ])