2016-11-20 80 views
0

我有一个猫鼬架构这样来查询集合的阵列内部的数据:如何使用猫鼬

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并没有解决我从整个收集中显示的问题,但我需要从单个文档。 希望从日期范围中查找日志。 任何建议,非常感谢。

+0

使用$过滤器你能证明你已经尝试过的例子查询和您的预期输出是一些样本文档是什么? – chridam

回答

1

使用聚合框架。$放松你的日志阵列和应用所需$排序$匹配任何条件,skip.or您可以检查在$项目阶段$过滤器,请发表您的预期输出我会尽我的手

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: { 
    input: logs, 
    as: "num", 
    cond: { $and: [ 
     { $gte: [ "$$num.date", fromDate ] }, 
     { $lte: [ "$$num.date", toDate ] } 
     ] } 
    } 
} 
+0

我想从$ gte获取日志:“a_date”,$ lte:“a_date” – jsgeek

+0

检查我更新的答案 –