Запрос mongodb из golang с использованием _id, хранящегося в массиве

Вот мой вопрос. У меня есть массив, в котором хранятся _ids объектов mongodbs. Как правильно получить их все одним запросом, используя пакеты mgo и bson?

Итак, если массив такой: ids:=["543d171c5b2c12420dd016","543d171c5b2dd016"]

Как мы делаем запрос? Я пробовал это, но я знаю, что это неправильно.

query := bson.M{"_id": bson.M{"$in": ids}}
c.Find(query).All()

заранее спасибо


person Daemon1313    schedule 17.10.2014    source источник


Ответы (2)


Если документы хранятся со строковыми идентификаторами, код выглядит правильно.

Идентификаторы выглядят как идентификаторы объектов в шестнадцатеричном кодировании. Если идентификаторы объектов являются идентификаторами объектов, вам необходимо преобразовать шестнадцатеричные строки в идентификаторы объектов:

oids := make([]bson.ObjectId, len(ids))
for i := range ids {
  oids[i] = bson.ObjectIdHex(ids[i])
}
query := bson.M{"_id": bson.M{"$in": oids}}
person Cerise Limón    schedule 17.10.2014

Синтаксис MongoDB для go.mongodb.org/mongo-driver был обновлен, он должен работать с официальным драйвером.

oids := make([]primitive.ObjectID, len(ids))
for i := range ids {
    objID, err := primitive.ObjectIDFromHex(ids[i])
    if err == nil {
        oids = append(oids, objID)
    }
}
person Raj    schedule 10.08.2020