Запрос агрегации монго в golang с драйвером mgo
У меня есть следующий запрос в mongodb -
db.devices.aggregate({
$match: {userId: "v73TuQqZykbxFXsWo", state: true}},
{
$project: {
userId: 1,
categorySlug: 1,
weight: {
$cond: [
{"$or": [
{$eq: ["$categorySlug", "air_fryer"] },
{$eq: ["$categorySlug", "iron"] }
] },
0, 1] }
} },
{$sort: {weight: 1}},
{ $limit : 10 }
);
Я пытаюсь написать это на Голанге, используя драйвер MGO, но не могу обернуть голову вокруг этого вообще!
Как мне перевести это в запрос golang mgo?
1 ответ
Решение
Примеров на документах было бы достаточно, чтобы начать. Однако, если вы не знакомы с Голангом, $cond
часть может быть немного сложнее. Смотрите ниже пример кода:
collection := session.DB("dbName").C("devices")
stage_match := bson.M{"$match":bson.M{"userId":"v73TuQqZykbxFXsWo", "state": true}}
condition_weight := []interface{}{bson.M{"$or": []bson.M{
bson.M{"$eq": []string{"$categorySlug", "air_fryer"}},
bson.M{"$eq": []string{"$categorySlug", "iron"}},
}}, 0, 1}
stage_project:= bson.M{"$project": bson.M{"userId":1, "categorySlug":1, "weight": condition_weight}}
stage_sort := bson.M{"$sort": bson.M{"weight":1}}
stage_limit := bson.M{"$limit": 10}
pipe := collection.Pipe([]bson.M{stage_match, stage_project, stage_sort, stage_limit})
Смотрите также mgo: тип трубы