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

MongoDB返回键与条件匹配的数组值,mongodb,Mongodb,我试图从一个对象数组中获取符合特定条件的键的值。对于数组中的对象,键为long,值为string。以下是MondgoDB文档示例: "_id" : ObjectId("509eba6d84f30613b4aee1ca"), "timestamps" : [ { "1234" : "ABC" }, { "2345" : "DEF" }, { "3456" : "GHI" }, {

我试图从一个对象数组中获取符合特定条件的键的值。对于数组中的对象,键为long,值为string。以下是MondgoDB文档示例:

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

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

也许我完全搞错了。。。看起来您需要稍微更改文档的结构:

"_id" : ObjectId("509eba6d84f30613b4aee1ca"),
"timestamps" : [
{
    "key": "1234",
    "val": "ABC"
},
{
    "key": "2345",
    "val": "DEF"
},
"word" : "foo"
然后可以使用
elemMatch
进行查询:

db.test.find({timestamps: {$elemMatch: {'key': {$gt: '1234'}}}})
确保在
时间戳上有索引。键