我有一个像这样的猫鼬模式:
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 :(得分: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 ] }
] }
}
}