Javascript MongoDB-查询数组的最后一个对象?
在MongoDB中是否有任何方法可以在单个db查询中专门查询数组中最后一个对象的键值 这是我收藏的文件Javascript MongoDB-查询数组的最后一个对象?,javascript,arrays,mongodb,mongodb-query,Javascript,Arrays,Mongodb,Mongodb Query,在MongoDB中是否有任何方法可以在单个db查询中专门查询数组中最后一个对象的键值 这是我收藏的文件 { "com" : [ { "ts" : 1510830164203, "com" : "com1" }, { "ts" : 1511242569673, "com" : "connected" }, { "ts&
{
"com" : [
{ "ts" : 1510830164203, "com" : "com1" },
{ "ts" : 1511242569673, "com" : "connected" },
{ "ts" : 1511244832741, "com" : "vb" }
],
"status" : [
{ "ts" : 1510857000000, "stat" : 3 }
]
}
如您所见,com中有多个对象。
如何查询最后一个对象的ts(时间戳),或者检查最后一个com是否插入到今天的日期之间
我已经经历了这些,但没有找到合适的解决方案
非常感谢您的帮助。您可以使用
$arrayElemAt
获取最后一个元素,然后在聚合中应用匹配。要使用$arrayElemAt
获取最后一个元素,请使用指示数组最后一个元素的第二个值-1
<代码>$arrayElemAt:[“arrayName”,-1]
。代码将类似于
db.collectionName.aggregate([
{
$project: {
status: 1,
com: {$arrayElemAt: ["$com", -1]}
}
},
{
$match: {"com.ts": 15115465465}
}
])
注意:如果您想比较like小于或大于,请使用like:$lt、$lte、$gt或$gte
您需要的任何一个
$match: {"com.ts": {$lt: 15115465465}}
如果只需要查找最后一个元素,则可以使用下面的项目查询
db.collection.find({},{status: 1, com:{$slice: -1}})
更多关于类似主题的讨论是的,我认为这可以达到目的。但是告诉我一件事。这个问题有多严重?我的意思是我必须更频繁地使用这种查询。我希望这不会引起任何问题,对吗?是的,这不是繁重的查询,简单的查询我们可以用它作为最后一个对象的键吗?我的意思是它将在整个数组中搜索。不,我只需要满足最后一个对象键条件的对象。结果将返回满足今天日期条件的所有对象。现在,您可以创建一个max()聚合来获取最大ts(假设最大值具有最高值)。或者您可以应用以下命令:db.table.find({com:{$elemMatch:{ts:{$gte:d1,$lt:d2}}}}})排序({ts:-1})。限制(1)您不认为上面的聚合查询会比这更容易吗?没有更容易的了,这两个都是您问题的解决方案。更多关于类似主题的讨论讨论讨论在哪里?请按照超链接或使用URL
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
}
]
);
db.collection.find({},{status: 1, com:{$slice: -1}})