В чем должна быть ошибка в проекте $ mongodb конвейер запроса? - PullRequest
0 голосов
/ 06 июля 2018

Я передаю свои данные в коллекцию mongodb, но она не возвращает мне никаких данных, код следующий: -

func GetLog(c *gin.Context) {
values := c.Query("value")
fmt.Println("value", values)
result := []bson.M{}
mongoSession := config.ConnectDb()
getCollection := mongoSession.DB(config.Database).C(config.LogCollection)
pipe := getCollection.Pipe([]bson.M{ 
            bson.M{"$unwind": "$booking_details"},
                bson.M{"$project": bson.M{
                "role":1,
                "date":1,
                "idadress":1,
                "booking":1,
                "booking_values":bson.M{"$objectToArray":"$booking"},
            } },
    bson.M{"$match": bson.M{
        "booking_values.v" : bson.RegEx{"(?i).*"+values+".*", "i"},
    }}, } )
fmt.Println(pipe)
err := pipe.All(&result)
fmt.Println(result)
}

В значениях будет string, почему это не даст мне никакого результата. данные в mongodb:

 {
  "_id": ObjectId("5b3d970398e9d099427896c3"),
  "role": "New Booking is there by abc",
  "date": "07/04/2018",
  "idaddress": "213.123.123.213",
  "booking": {
    "bedroom": 4,
    "bathroom": 6,
    "customer": "abc",
    "email": "abc@gmail.com",
    "provider": "provider1",
    "address": "brazil",
    "appt": "123456",
    "phone": "987654321"
 }
}

Структура похожа на приведенную ниже:

 type Log struct {
Id              bson.ObjectId    `json:"_id" bson:"_id,omitempty"`
Role              string         `json:"role" bson:"role"`
Date              string         `json:"date" bson:"date"`
IpAddress         string         `json:"idaddress" bson:"idaddress"`
Booking           interface{}    `json:"booking" bson:"booking"`
}
type Logs []Log

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Измените код pipe на следующий код: -

pipe := getCollection.Pipe([]bson.M{ 
                bson.M{"$project": bson.M{
                "role":1,
                "date":1,
                "idaddress":1,
                "booking":1,
                "booking_values":bson.M{"$objectToArray":"$booking"},
            } },
    bson.M{"$match": bson.M{
        "booking_values.v" : bson.RegEx{"(?i).*"+values+".*", "i"},
    }}, } )

для вас нет поля booking_details, как сказал icza , поэтому вы должны удалить его и затем запустить свой код go.

0 голосов
/ 06 июля 2018

Не знаю этого языка, но:

  • Если вы передадите bson.M {"$ unwind": "$ booking_details"}, в полученных документах будут поля "booking_details",

  • Так что вы должны изменить

     "booking":1,
     "booking_values":bson.M{"$objectToArray":"$booking"},
    

по

     "booking_details":1,
     "booking_values":bson.M{"$objectToArray":"$booking_details"},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...