在 MongoDB 中是否有任何方法可以在单个数据库查询中专门查询数组中最后一个对象的键值。
例如:这是我在集合中的文档。
{"com" : [ { "ts" : 1510830164203, "com" : "com1" }, { "ts" : 1511242569673, "com" : "connected" },{ "ts" : 1511244832741, "com" : "vb" } ],"status" : [ { "ts" : 1510857000000, "stat" : 3 } ] }
因此,您可以看到 com 中有多个对象。 如何查询最后一个对象的ts(时间戳)或者我想检查是否在今天的日期之间插入最后一个com。
我已经完成了这个link.但是找不到合适的解决方案。
任何帮助都可以表示赞赏。
答案 0 :(得分:2)
您可以使用$arrayElemAt
获取最后一个元素,然后匹配aggregation
中应用的内容。要使用$arrayElemAt
获取最后一个元素,请使用指示数组最后一个元素的第二个值-1
。 $arrayElemAt: ["arrayName", -1]
。代码就像
db.collectionName.aggregate([
{
$project: {
status: 1,
com: {$arrayElemAt: ["$com", -1]}
}
},
{
$match: {"com.ts": 15115465465}
}
])
N.B:如果你想比较小于或大于,那么使用像:$lt, $lte, $gt, or $gte
你需要的任何一个
$match: {"com.ts": {$lt: 15115465465}}
答案 1 :(得分:0)
var d1 = new Date( parseInt( "Today at 12:00 AM", 16 ) * 1000 )
var d2 = new Date( parseInt( "Tomorrow at 12:00 AM", 16 ) * 1000 )
db.table.find(
{ com: { $elemMatch: {ts:{ $gte: d1, $lt: d2 } } } })
)
答案 2 :(得分:0)
db.collection.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
"_id" : ObjectId("5a197a3bde472b16ed9fc28d")
}
},
// Stage 2
{
$unwind: {
path : "$com"
}
},
// Stage 3
{
$sort: {
'com.ts':-1
}
},
// Stage 4
{
$limit: 1
}
]
);
答案 3 :(得分:0)