MGO Query вложенный массив объектов - PullRequest
0 голосов
/ 23 апреля 2019

У меня проблемы с преобразованием запроса MongoDB в mgo bson.Схема записи Mongo показана ниже.Я хочу найти записи, имеющие темы с метками «Образование» и «Студенты».

db.questions.insert
(
    {
        "_id" : ObjectId("5cb4048478163fa3c9726fdf"),
        "questionText" : "why?",
        "createdOn" :  new Date(),
        "createdBy": user1,
        "topics" : [
            {
                "label": "Education",
            },
            {
                "label": "Life and Living",
            },
            {
                "label": "Students"
            }
        ]
    }
)

При использовании Robo 3T запрос выглядит следующим образом:

db.questions.find({$and : [
    {"topics": {"label": "Students"}}, 
    {"topics": {"label": "Education"}}
]})

У меня возникли проблемымоделирование этого с MGO.В настоящее время пробовали это:

map[$and:[
    map[topics:map[label:students]] 
    map[topics:map[label:life and living]]
]]

и это

map[topics:map[$and:[
    map[label:students] 
    map[label:life and living]
]]]

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Модель BSON для приведенного выше ответа выглядит следующим образом:

query = getAndFilters(
    bson.M{"topics": bson.M{"$elemMatch": bson.M{"label": "Students"}}},
    bson.M{"topics": bson.M{"$elemMatch": bson.M{"label": "Education"}}})
0 голосов
/ 23 апреля 2019

Если вы хотите найти какое-либо значение из вложенного массива, используйте метод $ elemMatch.

db.questions.find(
    {$and: 
        [
            {topics: {$elemMatch: {label: 'Students'}}},
            {topics: {$elemMatch: {label: 'Education'}}}
        ]
    }
)
...