1

我正在尝试从匹配某些条件的键的对象数组中获取值。对于数组中的对象,键是长整数,值是字符串。这是一个示例 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,而不是值时间戳本身。

4

1 回答 1

3

也许我完全错了......看起来你需要改变一下文件的结构:

"_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

高温高压

于 2012-11-11T00:19:25.017 回答