我的mongo集合的一个元素具有以下模式(并代表一个扑克手)。
{
"players":
[
{"active":true,"seat":1,"stack":1769,"screenName":"schla"},
{"active":true,"seat":3,"stack":2000,"screenName":"galgegla"},
{"active":true,"seat":4,"stack":483,"screenName":"khrier"},
{"active":true,"seat":5,"stack":2813,"screenName":"frrou4535"},
{"active":true,"seat":6,"stack":4002,"screenName":"Guabounai"}
],
"rounds":[],
"gameNum":"1030564654564",
"time":"2013/12/21 21:12:03"
}
我想在我的收藏中搜索至少有一次玩家在玩家阵列中使用screenName “galgegla”的玩家。
答案 0 :(得分:1)
试试这个:
a.filter(function(arr){
return arr.players.filter(function(player){
return player.screenName == 'galgegla';
}).length;
});
假设a
是这些对象的数组。
它根据天气过滤对象数组,或者不对象的玩家数组上的过滤器返回任何结果。
...但当然我没有考虑mongo的原生功能,所以另一个答案会更有效。 (但可能效率不高)
答案 1 :(得分:1)
假设您的收藏品名为“手”,您可以执行以下操作:
db.hands.find( { 'players.screenName': 'galgegla' } )
请参阅“匹配字段而不指定数组索引”下的示例:http://docs.mongodb.org/manual/tutorial/query-documents/#match-a-field-without-specifying-array-index