#mongodb #go
#mongodb #Вперед
Вопрос:
Я использую golang с mongodb, коллекцией mgo
Моя коллекция mongodb
**department**
{
dept_id:1,
dept_name:'CSE',
dept_overview:'overview'
}
................
**employee**
{
emp_id:1,
emp_name:'abc',
qualification:'PHD',
emp_dept:'CSE',
city:'xyz'
}
{
emp_id:2,
emp_name:'xyz',
qualification:'PHD',
emp_dept:'CSE',
city:'xyz',
status:1
}
..........
Ниже приведен мой код перехода с использованием конвейера
var conditionParam []bson.M
if(city!=""){
conditionParam = []bson.M{
bson.M{"$eq": []string{"$$element.qualification", "PHD"}},
bson.M{"$eq": []string{"$$element.emp_dept", "CSE"}},
bson.M{"$eq": []string{"$$element.city", "xyz"}},
bson.M{"$or": []bson.M{
bson.M{"$$element.status": bson.M{"$exists": false}},
bson.M{"$$element.status": 1}},
},
}
}else if(){
--------------------
}
matchStage:=bson.M{"$match":bson.M{'dept_id':1}}
lookupStage:=bson.M{"$lookup": bson.M{
"from": "employee",
"localField": "dept_name",
"foreignField": "emp_dept",
"as": "result_list",
}}
pipeline := getCollection.Pipe([]bson.M{
matchStage,
lookupStage,
{"$addFields": bson.M{
"result_list": bson.M{
"$filter": bson.M{
"input": "$result_list",
"as": "element",
"cond": bson.M{
"$and": conditionParam,
},
},
},
}},
})
Этот код возвращает ошибку
Unrecognized expression '$$element.status'
Как мы можем использовать $or
inside $and
в golang, используя коллекцию mgo?
когда я помещаю комментарий в or
оператор, он возвращает результат, но когда я использовал or
, он выдает ошибку.Кто-нибудь может подсказать мне, как использовать $ или внутри $ и в конвейере
Комментарии:
1. Пожалуйста, правильно отформатируйте свой код и включите в вопрос все соответствующие фрагменты кода. Это трудно читать и воспроизводить. Также используйте
[]bson.M
вместо[]interface{}
.2. @Зелёный Я повторно отправил вопрос.
Ответ №1:
var conditionParam []bson.M
if city == "" {
conditionParam = []bson.M{
bson.M{"$eq": []string{"$$element.qualification", "PHD"}},
bson.M{"$eq": []string{"$$element.emp_dept", "CSE"}},
bson.M{"$eq": []string{"$$element.city", "xyz"}},
bson.M{"$or": []interface{}{"$exists", []interface{}{"$$element.status", false}}},
bson.M{"$or": []interface{}{"$$element.status", 1}},
}
}
Я попробовал этот код для написания conditionParam, и у меня это сработало. Я еще не проверил все случаи, но я хочу знать ваше предложение, правильно ли написать or
оператор для проверки существования поля и, если существует, проверить его значение.