一个mongodb集合
{
"_id" : ObjectId("574bbae4d009b5364abaebe5"),
"cityid" : 406,
"location" : {
"type" : "Point",
"coordinates" : [
118.602355,
24.89083
]
},
"shopid" : "a"
}
有大约50,000行;
和索引:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "pingan-test.shop_actinfo_collection_0530"
},
{
"v" : 1,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"ns" : "pingan-test.shop_actinfo_collection_0530",
"2dsphereIndexVersion" : 3
},
{
"v" : 1,
"key" : {
"shopid" : 1,
"cityid" : 1
},
"name" : "shopid_1_cityid_1",
"ns" : "pingan-test.shop_actinfo_collection_0530"
}
]
我查询这个集合,如:
body = {'cityid': 2, 'location': {'$near': {'$geometry': {'type': 'Point', 'coordinates': [122.0, 31.0]}}}, 'shopid': {'$in': ['a','b']}}
results = collection.find(body, {'shopid': 1, '_id':0},).batch_size(20).limit(20)
shops = list(results)
问题是它运行大约400毫秒。但如果我们不关心位置,它只需要30毫秒。
为什么以及如何解决?请。
答案 0 :(得分:1)
你有shopid和cityid的索引,但你搜索cityid。由于索引首先由shopid排序,因此不能用于按cityid搜索。如果您将索引更改为cityid:1,shopid:1,那么您将看到性能改进,因为您的查询将能够使用索引进行搜索。
答案 1 :(得分:1)
毕竟,我明白了。
我只是为Additional information: Cannot deserialize the current JSON object
创建一个索引,然后创建世界和平。
再次感谢Assets。