使用存储在数组中的_id从golang查询mongodb

时间:2014-10-17 15:22:39

标签: mongodb go bson mgo

所以这是我的问题。我有一个数组存储了_ids mongodbs对象。什么是使用mgo和bson包在一个查询中检索它们的正确方法?

所以如果数组是这样的:ids:=["543d171c5b2c12420dd016","543d171c5b2dd016"]

我们如何进行查询?我试过了,但我知道错了。

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

提前致谢

2 个答案:

答案 0 :(得分:9)

如果文档存储有字符串ID,则代码看起来是正确的。

id看起来像十六进制编码的对象id。如果对象标识符是对象ID,则需要将十六进制字符串转换为对象ID:

oids := make([]bson.ObjectId, len(ids))
for i := range ids {
  oids[i] = bson.ObjectIdHex(ids[i])
}
query := bson.M{"_id": bson.M{"$in": oids}}

答案 1 :(得分:1)

go.mongodb.org/mongo-driver的MongoDB语法已更新,可以在官方驱动程序下使用。

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