我正在使用一些嵌套文档......如何检查 只存在一把钥匙?
即..如果我想返回任何嵌套键“work”的记录,其中父键是动态的。
这是应该返回的记录:
{
"_id" : ObjectId("123"),
"customer_name" : "test user",
"123456" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"321456" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"789654" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"createad" : "2011-04-14 16:44:09"
}
以下是不应返回的记录:
{
"_id" : ObjectId("123"),
"customer_name" : "test user",
"123456" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"321456" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
"home1" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"321543" : {
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
"home1" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09",
}
},
"createad" : "2011-04-14 16:44:09"
}
我的猜测会是这样的: db.find({ “*工作”:{ “$存在”:真正}}) 任何想法?
答案 0 :(得分:2)
将值作为键并且当前(也可能在将来)也不是一个好的做法,因此不可能在字段名中使用通配符查询MongoDB集合。所以我建议按照这个模型重新设计模式:
"_id" : ObjectId("55128d6315f3df650f2038cf"),
"customer_name" : "test user",
"createad" : "2011-04-14 16:44:09",
"data" : [
{
"key" : "123456",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
},
{
"key" : "321456",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
},
{
"key" : "789654",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
}
]
}
您可以按如下方式查询
db.collection.find({ "data.work" : { $exists : true, $ne : null } })
检查work
数组中是否存在data
字段。
答案 1 :(得分:0)
如果您的父键不同,则必须通过它循环获取应用程序的所有数据。 因为mongodb存储数据的方式,如果你有不同的父键,你不能进行查询。您必须将所有文档都存入您的应用程序并通过它循环并自行检查。
如果您有大量数据并且不想将所有数据都提供给您的应用程序,我建议您以不同的方式排列数据,这样您就可以更快地查询数据