我目前正在尝试在 mongodb 内的文档数组中提取单个对象。这是一个示例数据集:"_id" : ObjectId("564aae61e0c4e5dddb07343b"),"name" : "The Races","description" : "Horse races","capacity" : 0,"open" : true,"type" : 0,"races" : [ { "_id" : ObjectId("564ab9097628ba2c6ec54423"), "race" : { "distance" : 3000, "user" : { "_id" : ObjectId("5648bdbe7628ba189e011b18"), "status" : 1, "lastName" : "Miranda", "firstName" : "Aramys" } } }, { "_id" : ObjectId("564ab9847628ba2c81f2f34a"), "bet" : { "distance" : 3000, "user" : { "_id" : ObjectId("5648bdbe7628ba189e011b18"), "status" : 1, "lastName" : "Miranda", "firstName" : "Aramys" } } },{...}]我可以在 mongo 中使用以下内容成功查询:db.tracks.find({"_id": ObjectId("564aae61e0c4e5dddb07343b")}, {"races": { $elemMatch: {"_id": ObjectId("564ab9847628ba2c81f2f34a")}}}).pretty()我无法使用 mgo 做同样的事情,并尝试了以下方法:使用嵌套(抛出:复合文字中缺少类型,地图文字中缺少键)// Using nesting (Throws: missing type in composite literal, missing key in map literal)c.Find(bson.M{{"_id": bson.ObjectIdHex(p.ByName("id"))}, bson.M{"races": bson.M{"$elemMatch": bson.M{"_id": bson.ObjectIdHex(p.ByName("raceId"))}}}}).One(&result)// Using select (Returns empty)c.Find(bson.M{"_id": bson.ObjectIdHex(p.ByName("id"))}).Select(bson.M{"races._id": bson.ObjectIdHex(p.ByName("raceId"))}).One(&result)//As an array (Returns empty)c.Find([]bson.M{{"_id": bson.ObjectIdHex(p.ByName("id"))}, bson.M{"races": bson.M{"$elemMatch": bson.M{"_id": bson.ObjectIdHex(p.ByName("raceId"))}}}}).One(&result)我正在使用 httprouter 和 p.ByName("...") 调用是传递给处理程序的参数。提前致谢。
1 回答
湖上湖
TA贡献2003条经验 获得超2个赞
将采用该Select方法,因为文档指出这可以选择应为找到的结果检索哪些字段,因此$elemMatch可以在此处结合使用运算符进行投影Select,最终查询类似于:
c.Find(bson.M{
"_id": bson.ObjectIdHex(p.ByName("id"))
}).Select(bson.M{
"races": bson.M{
"$elemMatch": bson.M{
"_id": bson.ObjectIdHex(p.ByName("raceId"))
}
}
}).One(&result)
- 1 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消