【发布时间】:2016-08-10 13:36:33
【问题描述】:
我目前有这个架构
var dataSchema = new Schema({
hid: { type: String },
sensors: [{
nid: { type: String },
sid: { type: String },
data: {
param1: { type: String },
param2: { type: String },
data: { type: String }
},
date: { type: Date, default: Date.now }
}],
actuators: [{
nid: { type: String },
aid: { type: String },
control_id: { type: String },
data: {
param1: { type: String },
param2: { type: String },
data: { type: String }
},
date: { type: Date, default: Date.now }
}],
status: [{
nid: {type: String},
status_code: {type: String},
date: { type: Date, default: Date.now }
}],
updated: { type: Date, default: Date.now },
created: { type: Date }
});
我正在尝试构建的查询应该通过“隐藏”搜索架构,然后只从“传感器”、“执行器”和“状态”数组中选择最后一个对象(按日期),但我可以'不知道该怎么做。
通过这个查询,我可以部分实现我想要得到的结果,但它一次只给我一个数组,所以我必须查询数据库 3 次,我会避免这样做
db.getCollection('data').aggregate([
{ $match : { hid : "testhid" } },
{$project : {"sensors" : 1}},
{$unwind : "$sensors"},
{$sort : {"sensors.date" : -1}},
{$limit : 1}
])
提前感谢您的帮助
【问题讨论】:
-
能否请您发布示例数据(测试文档)
-
您是否不仅要按传感器日期排序,还要按其他日期排序?您可以多次展开,但不能一次展开多个数组。这应该在一个查询中起作用。
标签: javascript mongodb mongoose mongodb-query aggregation-framework