如何使用mongoose查询集合数组中的数据

时间:2016-11-20 11:03:05

标签: arrays node.js mongodb mongoose

我有一个像这样的猫鼬模式:

 var LogsSchema = new Schema({
    date: Date,
    longitude: String,
    latitude: String,
    speed: Number
 });

var DeviceSchema = new Schema({

name: String,
model: String,
phone: {
    type: Number,
    required: true,
    unique: true
},
push: Number,   
logs: [LogsSchema],
})

我的数据库中有大量日志如何排序限制并跳过日志数组数据? 目前我只采取数组的最后10个元素,但我想选择应用条件。使用$ elemMatch并不能解决我从整个集合中显示的问题,但我需要从单个文档中获取。 希望从日期范围中查找日志。 任何建议都非常感谢。

1 个答案:

答案 0 :(得分:2)

使用聚合框架。$展开您的日志数组并应用您想要的任何条件$ sort $ match,skip.or您可以在$ project阶段检查$ filter,请发布您的预期输出我会尝试我的手

db.collection.aggregate([{"$unwind" : "$logs"},
{$match : {"$and" :  [{"logs.date" :{$gte : fromDate} },
{"logs.date" :{"$lte" : toDate}}]}},
{"$group" : "_id" : "_id",
"logs" : {"$push" : "$logs"},
"names" :{"$first" : "$name"}
}])

如果使用mongodb 3.2

,您可以使用$ filter
{
  $filter: {
     input: logs,
     as: "num",
     cond: { $and: [
        { $gte: [ "$$num.date", fromDate ] },
        { $lte: [ "$$num.date", toDate ] }
      ] }
  }
}