Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用$in和mongodb获取第一个文档_Mongodb - Fatal编程技术网

使用$in和mongodb获取第一个文档

使用$in和mongodb获取第一个文档,mongodb,Mongodb,如何获取mongo中使用的第一个元素? 如果我有一个类似于['car'、'house'、'cat'、'dog']的列表,以及一个包含许多文档(这些元素)的集合,我希望找到第一个包含cat的文档,以及第一个包含dog的文档 我曾尝试使用limit(),但实际上它只提供了一个文档,可以是car,也可以是dog或cat等 有没有办法将限额与美元合并 谢谢 编辑: 我收集的数据示例: { "_id": { "$oid": "51d53ace9e674607e837d62d"

如何获取mongo中使用的第一个元素? 如果我有一个类似于
['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的序列进行查询,但你想得到每种类型的最后一次插入?