假设我的文档结构类似于
[
{
_id:1,
Logs : [
{ time: 123, x: 24 },
{ time: 212, x: 13 },
{ time: 325, x: 34 }
]
},
{
_id:2,
Logs : [
{ time: 63, x: 19 },
{ time: 112, x: 25 },
{ time: 205, x: 15 }
]
}
]
我想要得到的是x
time
< time
的价值n和_id = y
所以例如,如果y = 2,并且n = 115,我希望25返回。
鉴于<img id="<?php echo $id; ?>" src="img/.." url=".." name="..." onClick="changeImage(this)"/>
function changeImage(item) {
var url_img = $(item).attr('url');
var name_item = $(item).attr('name');
var item_id = $(item).attr('id');
document.getElementById('test').innerHTML += '<div style=\'display:inline-block\'><img src=' + url_img + ' url = ' + url_img + ' onClick=document.getElementById(' + item_id + ').classname=\'\'; /> ' + name_item + '</div>';
$(item).toggleClass('hideitem');
}
&lt; 115和匹配数组中过滤器的最长时间?
我在C#中使用它,但如果有人可以提供帮助,可以从shell语法转换吗?
感谢
编辑:
所以我问的问题是...... $ elemmatch只会在找到一个匹配项时返回文档,因此$ elemmatch on time&lt; 115和_id = 2将返回第二个文档。如果我投影数组,我将获得所有三个Logs子文档。
因此我假设我需要使用Aggregation来过滤投影数组?
答案 0 :(得分:1)
以下聚合将为您提供所需的结果:
db.collection.aggregate([
{
"$match": {"_id": y, "Logs.time": {"$lt": n} }
},
{
"$unwind": "$Logs"
},
{
"$match": {"Logs.time": {"$lt": n} }
},
{
"$group": {
"_id": "$_id",
"x": { "$max": "$Logs.x" }
}
},
{
"$project": {
"_id": 0,
"x": 1
}
}
])