gpt4 book ai didi

mongodb - 如何将 mongodb 投影与 Go 和 mgo 一起使用?

转载 作者:IT王子 更新时间:2023-10-29 00:53:59 35 4
gpt4 key购买 nike

我目前正在尝试在 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 做同样的事情,并尝试了以下方法:

使用嵌套(抛出:复合文字中缺少类型, map 文字中缺少键)

// 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("...") 调用是传递给处理程序的参数。

提前致谢。

最佳答案

将与 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)

关于mongodb - 如何将 mongodb 投影与 Go 和 mgo 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751451/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com