我的文件格式如下
{ "_id" : ObjectId("56119c0fe4b0f3b51d0132b1"), "ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900V Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36", "userId" : "55e5d92ce4b0cc9c0a1f1633" }
{ "_id" : ObjectId("56119c0fe4b0f3b51d0132b4"), "ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900V Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36", "userId" : "55f09147e4b0cc9c0a2cfe34" }
{ "_id" : ObjectId("56119ef6e4b0f3b51d013abe"), "ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A405 (5726401600)", "userId" : "55f09147e4b0cc9c0a2cfe34" }
{ "_id" : ObjectId("56119f64e4b0f3b51d013ae7"), "ua" : "Mozilla/5.0 (iPad; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A405 (5726401600)", "userId" : "55f09147e4b0cc9c0a2cfe35" }
字段ua
具有用户代理字符串,该字符串基本上包含用户设备信息。我想找出哪些用户正在使用iOS(如果字符串包含' iPhone / iPad')vs Android(如果字符串包含' Android')。基本上我想要输出如下
{ "userId" : "56153199e4b0f3b51d043d36" , "iOS": "Yes", "Android" : "No"}
{ "userId" : "55f09147e4b0cc9c0a2cfe34" , "iOS": "Yes", "Android" : "Yes"}
{ "userId" : "56153199e4b0f3b51d043d36" , "iOS": "No", "Android" : "Yes"}
对此的聚合查询如何?
答案 0 :(得分:3)
我建议你不要进行On-the-go查询处理。因为当你有大量数据时,它可能会减慢你的处理速度。
我这样做的理想方式可能是对用户代理进行后期处理或在插入时处理传入的数据。
例如,假设您要在文档下面插入。
{ "_id" : ObjectId("56119c0fe4b0f3b51d0132b1"), "ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900V Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36", "userId" : "55e5d92ce4b0cc9c0a1f1633" }
您将上述内容转换为以下内容:
{ "_id" : ObjectId("56119c0fe4b0f3b51d0132b1"), "ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900V Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36", "userId" : "55e5d92ce4b0cc9c0a1f1633" ,"android":true, "ios":false}
然后,你可以像下面这样查询以获得使用android的用户,而不是下面的ios:
db.collection_name.find({"android":true, "ios":false})
这比每次在旅途中都要快。