首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$in和mongodb获取第一个文档

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

Stack Overflow用户
提问于 2013-07-04 19:01:41
回答 1查看 208关注 0票数 0

如何获取在mongo中使用的第一个元素?如果我有一个像['car', 'house', 'cat', dog']这样的列表,以及一个包含许多文档这些元素的集合,我希望找到第一个包含cat的文档,以及第一个包含dog等的文档。

我尝试过使用limit(),但实际上它只给了我一个文档,可以是car,也可以是dogcat等。

有没有办法把限制和$in结合起来?

谢谢

编辑:我的数据示例:

代码语言:javascript
复制
{
    "_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"
}
EN

回答 1

Stack Overflow用户

发布于 2013-07-04 19:16:22

您不能为$in添加限制,但您可以通过使用聚合框架来欺骗:

代码语言:javascript
复制
db.collection.aggregate([
    {$match:{serial:{$in:[list_of_serials]}}},
    {$sort:{_id:-1}},
    {$group:{_id:'$serial',type:{$first:'$type'},sensors:{$first:'$sensors'},id:{$first:'$_id'}}}
]);

将获得每种类型的所有第一次找到的列表。

编辑

更新将根据_id获取最后插入的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17468602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档