使用$in和mongodb获取第一个文档
如何获取mongo中使用的第一个元素? 如果我有一个类似于使用$in和mongodb获取第一个文档,mongodb,Mongodb,如何获取mongo中使用的第一个元素? 如果我有一个类似于['car'、'house'、'cat'、'dog']的列表,以及一个包含许多文档(这些元素)的集合,我希望找到第一个包含cat的文档,以及第一个包含dog的文档 我曾尝试使用limit(),但实际上它只提供了一个文档,可以是car,也可以是dog或cat等 有没有办法将限额与美元合并 谢谢 编辑: 我收集的数据示例: { "_id": { "$oid": "51d53ace9e674607e837d62d"
['car'、'house'、'cat'、'dog']
的列表,以及一个包含许多文档(这些元素)的集合,我希望找到第一个包含cat
的文档,以及第一个包含dog
的文档
我曾尝试使用limit()
,但实际上它只提供了一个文档,可以是car
,也可以是dog
或cat
等
有没有办法将限额与美元合并
谢谢
编辑:
我收集的数据示例:
{
"_id": {
"$oid": "51d53ace9e674607e837d62d"
},
"sensors": [{
"name": "os-hostname",
"value": "yahourt"
}, {
"name": "os-domain-name",
"value": ""
}, {
"name": "os-platform",
"value": "Win32NT"
}, {
"name": "os-fullname",
"value": "Microsoft Windows XP Professional"
}, {
"name": "os-version",
"value": "5.1.2600.131072"
}],
"type": "os",
"serial": "2_os_os-hostname_yahourt"
} {
"_id": {
"$oid": "51d53ace9e674607e837d62e"
},
"sensors": [{
"name": "cpu-id",
"value": "_Total"
}, {
"name": "cpu-usage",
"value": 37.2257042
}],
"type": "cpu",
"serial": "2_cpu_cpu-id_total"
} {
"_id": {
"$oid": "51d53ace9e674607e837d62f"
},
"sensors": [{
"name": "cpu-id",
"value": "0"
}, {
"name": "cpu-usage",
"value": 48.90282
}],
"type": "cpu",
"serial": "2_cpu_cpu-id_0"
} {
"_id": {
"$oid": "51d53ace9e674607e837d630"
},
"sensors": [{
"name": "cpu-id",
"value": "1"
}, {
"name": "cpu-usage",
"value": 25.54859
}],
"type": "cpu",
"serial": "2_cpu_cpu-id_1"
} {
"_id": {
"$oid": "51d53ace9e674607e837d631"
},
"sensors": [{
"name": "volume-name",
"value": "C:"
}, {
"name": "volume-label",
"value": ""
}, {
"name": "volume-total-size",
"value": "52427898880"
}, {
"name": "volume-total-free-space",
"value": "20305170432"
}, {
"name": "volume-percent-free-space",
"value": "38"
}, {
"name": "volume-reads-per-second",
"value": 0.0
}, {
"name": "volume-writes-per-second",
"value": 9.324152
}, {
"name": "volume-read-bytes-per-second",
"value": 0.0
}, {
"name": "volume-write-bytes-per-second",
"value": 194141.6
}, {
"name": "volume-queue-length",
"value": 0.0
}],
"type": "disk",
"serial": "2_disk_volume-name_c"
}
您不能将限制添加到$in,但可以使用聚合框架进行欺骗:
db.collection.aggregate([
{$match:{serial:{$in:[list_of_serials]}}},
{$sort:{_id:-1}},
{$group:{_id:'$serial',type:{$first:'$type'},sensors:{$first:'$sensors'},id:{$first:'$_id'}}}
]);
将获得每种类型的所有首次找到的对象的列表
编辑
更新将根据
\u id
获取最后一次插入的内容。什么将决定每个类别的“第一个”?有订单什么的吗?无效:(我在我的收藏中附上了一个例子。假设我每分钟都在我的收藏中存储这些数据。我如何才能得到最后一次插入?串行字段是关键。@gorjuce您可以对\u id
进行排序,这至少在大多数情况下是准确的,在您的情况下,大约90%是正确的think@gorjuce“串行字段是关键”是什么意思?你的意思是你只需要它回来吗?不。我的意思是我需要序列号在[MySerialist]中的最后一个文档。所有文档字段都需要返回。例如:序列号为xxxx的最后一个文档,序列号为xxx2的最后一个文档,等等。其中xxx在[MySerialist]中.你知道我的意思吗?@gorjuce我想你想按$in的序列进行查询,但你想得到每种类型的最后一次插入?