Вопрос, как преобразовать команды mongodb в Bson в Golang

Это список коллекции

{
    _id : autoIncrement
    "P_NAME" : "Name",
    "P_LIST" : [
        {
            _id : autoIncrement
            "P_TYPE" : "HELL",
            "P_POOL" : "Not Use"
        }
    ]
}

Я использовал эту команду, когда использовал ее в MongoDB.

db.P.find({},{"P_LIST": {$elemMatch: {_id:2}}, _id: 0})

Точно так же на Голанге я пытался найти такое условие, но не вышло.

collection.Find(context.TODO(), bson.M{bson.M{}, bson.M{"P_LIST":bson.M{"$elemMatch":bson.M{"_id":2}}, bson.M{"_id": 0}}})

Как Golang может использовать команду «Найти» с условиями и фильтрами, такими как MongoDB?


person SangGeol    schedule 29.01.2020    source источник
comment
Во-первых, вы не должны использовать P_LIST в одном случае и POLICY_LIST в другом. В остальном в чем проблема? Что не работает? Как новый пользователь, пройдите тур и прочтите Как спросить.   -  person Ulrich Eckhardt    schedule 29.01.2020
comment
@UlrichEckhardt Ой! Я нашел ошибку и исправил.   -  person SangGeol    schedule 30.01.2020


Ответы (1)


Вы называете Find неправильно, вы передаете фильтр и проекцию в параметр фильтра Find.

func (coll *Collection) Find(ctx context.Context, filter interface{},
    opts ...*options.FindOptions) (*Cursor, error)

Попробуйте сделать это так:

collection.Find(
    context.TODO(),
    nil,
    options.Find().SetProjection(bson.M{
        "P_LIST": bson.M{
            "$elemMatch": bson.M{"_id": 2},
            "_id":        0,
        },
    })
)

Дополнительные сведения о Find см. Здесь

person Ayoub    schedule 29.01.2020
comment
Спасибо за ваш ответ. Я просто пытался это сделать, но в соответствующей части отображается ошибка options.Find () SetProjection (bson.M {bson.M {" P_LIST ": bson.M {" $ elemMatch ": bson.M {" _id ": 2} }}, Bson. M {"_ id"}}) A missing key in map literal. Теперь я хочу знать, почему возникает такая ошибка. - person SangGeol; 29.01.2020
comment
@SangGeol Я обновил ответ, на карте была опечатка, которую я передал SetProjection - person Ayoub; 29.01.2020