MongoDB返回键与条件匹配的数组值
我试图从一个对象数组中获取符合特定条件的键的值。对于数组中的对象,键为long,值为string。以下是MondgoDB文档示例:MongoDB返回键与条件匹配的数组值,mongodb,Mongodb,我试图从一个对象数组中获取符合特定条件的键的值。对于数组中的对象,键为long,值为string。以下是MondgoDB文档示例: "_id" : ObjectId("509eba6d84f30613b4aee1ca"), "timestamps" : [ { "1234" : "ABC" }, { "2345" : "DEF" }, { "3456" : "GHI" }, {
"_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'}}}})
确保在时间戳上有索引。键
嗯