2012-11-10 65 views
1

我想从匹配特定条件的键的对象数组中获取值。对于数组中的对象,键将是长整型和值字符串。下面是一个示例MondgoDB文件:MongoDB返回数组值,其中键匹配条件

"_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的东西,而不是时间戳本身的价值。

回答

2

也许我理解错了......看起来你需要改变一点你的文档的结构:

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

+0

问题解决了,t很多! – Exupery