我在走郎下面的查詢工作正常:
query["name"] = bson.M{"$regex": searchStr, "$options": "i"}
query["likes"] = userSession.Id
c.Find(query).Skip(0).Limit(2).Select(bson.M{"name":1, "profile":1, "description":1, "user_id":1, "likes":1}).Sort("-pro", "-check").All(&business);
然後我試圖使用聚合框架編寫相同的查詢:
query["name"] = bson.M{"$regex": searchStr, "$options": "i"}
query["likes"] = userSession.Id
oe := bson.M{
"$match" :query,
}
oa := bson.M{
"$project": bson.M {"pro": 1, "check": 1, "name":1, "profile":1, "description":1, "user_id":1, "likes":1, "nrLikes": bson.M{ "$size": "$likes" }, "city": 1, "country": 1, "industry": 1},
}
ol := bson.M{
"$limit" :pageSize,
}
os := bson.M{
"$skip" :skips,
}
or := bson.M{
"$sort" : bson.M {"pro": -1, "check": -1},
}
pipe := c.Pipe([]bson.M{oe, oa, or, os, ol })
pipe.All(&business)
第二個查詢在90%的時間內正常工作,但10%的時間返回不同的結果順序。
有什麼想法?
後來編輯:這裏是resuls
[]bson.M{
{
"description": "<p>sasdfdasf</p>",
"profile": []interface {}{
"rKwMmXPWheGczwvGn2TzSRU7jRorhorKwMmXPWheGczwvGn2TzSRU7jRorho=0.jpg",
},
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"nrLikes": int(1),
"name": "ediloc.com2",
"city": "Calimanesti",
"industry": "Automotive",
"_id": "Yo\xd4f\x1a\xa9Q|w\tG^",
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"country": "Romania",
},
{
"_id": "Yo\xc7\xd7\x1a\xa9Qy1['\xea",
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"name": "ediloc.com",
"country": "Romania",
"description": "<p>a</p>",
"profile": []interface {}{
"1ssSySNRZwGJJwqzXghL6qzAVfWZis1ssSySNRZwGJJwqzXghL6qzAVfWZis=1.jpg",
},
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"nrLikes": int(1),
"city": "Calimanesti",
"industry": "Accounting",
},
}
[]bson.M{
{
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"_id": "Yo\xd4f\x1a\xa9Q|w\tG^",
"name": "ediloc.com2",
"city": "Calimanesti",
"country": "Romania",
"profile": []interface {}{
"rKwMmXPWheGczwvGn2TzSRU7jRorhorKwMmXPWheGczwvGn2TzSRU7jRorho=0.jpg",
},
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"industry": "Automotive",,
"nrLikes": int(1),
},
{
"_id": "Yo\xc7\xd7\x1a\xa9Qy1['\xea",
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"industry": "Accounting",
"profile": []interface {}{
"1ssSySNRZwGJJwqzXghL6qzAVfWZis1ssSySNRZwGJJwqzXghL6qzAVfWZis=1.jpg",
},
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"nrLikes": int(1),
"name": "ediloc.com",
"city": "Calimanesti",
"country": "Romania",
"description": "<p>a</p>",
},
}
[]bson.M{
{
"nrLikes": int(1),
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"description": "<p>a</p>",
"profile": []interface {}{
"1ssSySNRZwGJJwqzXghL6qzAVfWZis1ssSySNRZwGJJwqzXghL6qzAVfWZis=1.jpg",
},
"country": "Romania",
"industry": "Accounting",
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"_id": "Yo\xc7\xd7\x1a\xa9Qy1['\xea",
"name": "ediloc.com",
"city": "Calimanesti",
},
{
"name": "ediloc.com2",
"industry": "Automotive",
"description": "<p>sasdfdasf</p>",
"likes": []interface {}{
"Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
},
"user_id": "Yo\xc7;\x1a\xa9Qy\b\xb8\xa2\xf9",
"city": "Calimanesti",
"country": "Romania",
"profile": []interface {}{
"rKwMmXPWheGczwvGn2TzSRU7jRorhorKwMmXPWheGczwvGn2TzSRU7jRorho=0.jpg",
},
"nrLikes": int(1),
"_id": "Yo\xd4f\x1a\xa9Q|w\tG^",
},
}
Pro和檢查領域是IN32,具有較高的親場數的文件應在具有較高檢查領域的文件具有優先權。
你是什麼'pro'字段的數據類型?你可以包括一些排序不正確的例子輸出嗎?如果結果不可預測,那麼您可能混合了根據[BSON比較/排序順序]排序的數據類型(https://docs.mongodb.com/manual/reference/bson-type-comparison-order/#bson -types對比順序)。 – Stennie
@Stennie我編輯了我的問題並添加了輸出。此外,檢查和專業領域都是int32。並且繼續查找使用cursor.sort()的第一個查詢正常工作。 –
你是否改變了輸出?除非我錯過了一些東西,似乎當前的結果文檔沒有你正在排序的'pro'和'check'字段。 – Stennie