我正在尝试从对象数组中获取符合某些条件的键的值。对于数组中的对象,键将是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的东西,而不是时间戳本身的值。
也许我弄错了…看起来你需要稍微改变一下文档的结构:
"_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
上有索引
宏达