提问者:小点点

MongoDB返回键匹配条件的数组值


我正在尝试从对象数组中获取符合某些条件的键的值。对于数组中的对象,键将是long s和值字符串。这是一个示例MondgoDB文档:

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

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


共1个答案

匿名用户

也许我弄错了…看起来你需要稍微改变一下文档的结构:

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

然后您可以使用elemMatch进行查询:

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

确保您在timestamp. key上有索引

宏达