【问题标题】:MongoDB return array values where key matches criteriaMongoDB 返回键匹配条件的数组值
【发布时间】:2012-11-10 21:21:38
【问题描述】:

我正在尝试从对象数组中获取符合特定条件的键的值。对于数组中的对象,键是长整数,值是字符串。这是一个示例 MondgoDB 文档:

"_id" : ObjectId("509eba6d84f30613b4aee1ca"),
"timestamps" : [
    {
        "1234" : "ABC"
    },
    {
        "2345" : "DEF"
    },
    {
        "3456" : "GHI"
    },
    {
        "4567" : [
            "JKL",
            "ABC"
        ]
    },
    {
        "5678" : "GHI"
    }
],
"word" : "foo"

例如,我想检索键小于 3000 的所有“时间戳”条目的值(即上面的“ABC”和“DEF”)。我只是幸运地通过使用coll.find({"timestamps.4567":{$exists:true}}) 找到集合中的哪些文档具有特定的键,但是在尝试coll.find({"timestamps":{$lt:3000}}) 之类的东西时我没有得到任何结果 - 我显然错过了一些可以检查时间戳的键是否更少的东西大于 3000,而不是时间戳本身的值。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    也许我完全弄错了...看来您需要稍微改变一下文档的结构:

    "_id" : ObjectId("509eba6d84f30613b4aee1ca"),
    "timestamps" : [
    {
        "key": "1234",
        "val": "ABC"
    },
    {
        "key": "2345",
        "val": "DEF"
    },
    "word" : "foo"
    

    然后就可以使用elemMatch查询:

    db.test.find({timestamps: {$elemMatch: {'key': {$gt: '1234'}}}})
    

    确保您在 timestamps.key 上有一个索引

    HTH

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2019-06-22
      • 2021-11-21
      相关资源
      最近更新 更多