我怎样才能在 MongoDB 中只得到一个值(Pymongo)
How can I get only a single value back in MongoDB (Pymongo)
这是我现在拥有的文件:
{
_id: ObjectId("62464e3e75c6d843a338993b"),
Name: 'The Team',
Members: [
{ User: Long("699724278526580847"), Rank: 3 },
{ User: Long("937398909418999808"), Rank: 4 },
{ User: Long("829765893287562113"), Rank: 1 },
{ User: Long("090119389582045756"), Rank: 1 },
{ User: Long("772474927459011034"), Rank: 1 },
]
}
我想获取通过输入选择的用户的“排名”值,对于此示例,假设执行命令的人选择了 ID 为“699724278526580847”的用户,我将如何查询和获取只返回该用户的排名?在 pymongo 中是否可以只获取该用户排名的整数值?
也许 mongo 中的类似内容您可以轻松转换为 python:
db.collection.aggregate([
{
$match: {
Name: "The Team" , "Members.User": NumberLong("699724278526580847")
}
},
{
"$addFields": {
"Members": {
"$filter": {
"input": "$Members",
"as": "m",
"cond": {
$eq: [
"$$m.User",
NumberLong("699724278526580847")
]
}
}
}
}
},
{
$unwind: "$Members"
},
{
"$project": {
Rank: "$Members.Rank",
_id: 0
}
}
])
解释:
- 匹配成员和团队
- 仅从数组中按用户过滤成员
- 展开数组以转换为对象
- 仅投影排名字段
这是我现在拥有的文件:
{
_id: ObjectId("62464e3e75c6d843a338993b"),
Name: 'The Team',
Members: [
{ User: Long("699724278526580847"), Rank: 3 },
{ User: Long("937398909418999808"), Rank: 4 },
{ User: Long("829765893287562113"), Rank: 1 },
{ User: Long("090119389582045756"), Rank: 1 },
{ User: Long("772474927459011034"), Rank: 1 },
]
}
我想获取通过输入选择的用户的“排名”值,对于此示例,假设执行命令的人选择了 ID 为“699724278526580847”的用户,我将如何查询和获取只返回该用户的排名?在 pymongo 中是否可以只获取该用户排名的整数值?
也许 mongo 中的类似内容您可以轻松转换为 python:
db.collection.aggregate([
{
$match: {
Name: "The Team" , "Members.User": NumberLong("699724278526580847")
}
},
{
"$addFields": {
"Members": {
"$filter": {
"input": "$Members",
"as": "m",
"cond": {
$eq: [
"$$m.User",
NumberLong("699724278526580847")
]
}
}
}
}
},
{
$unwind: "$Members"
},
{
"$project": {
Rank: "$Members.Rank",
_id: 0
}
}
])
解释:
- 匹配成员和团队
- 仅从数组中按用户过滤成员
- 展开数组以转换为对象
- 仅投影排名字段