gpt4 book ai didi

python - 按一个键的值对mongodb进行排序

转载 作者:可可西里 更新时间:2023-11-01 09:13:31 25 4
gpt4 key购买 nike

我有一个具有以下数据结构的集合:

[{name: "123", category: "A"},
{name: "456", category: "B"},
{name: "789", category: "A"},
{name: "101", category: "C"}]

我希望能够根据 category 的值对它们进行排序,方法是指定哪个先出现。例如,按照 B->C->A 的顺序对查询进行排序,结果将产生:

[{name: "456", category: "B"},
{name: "101", category: "C"},
{name: "123", category: "A"},
{name: "789", category: "A"}]

使用 mongo 查询 API 有什么好的方法吗?我正在使用 mongoengine

最佳答案

最好的方法是使用 .aggregate() 方法和 $cond 条件运算符在 $project 阶段为您的文档添加一个权重,然后使用 $sort 聚合运算符按对您的文档进行排序>体重

pipeline = [{'$project': {'category': 1,
'name': 1,
'w': {'$cond': [{'$eq': ['$category', 'B']},
1,
{'$cond': [{'$eq': ['$category', 'C']},
2,
3]
}]
}
}},
{'$sort': {'w': 1}}
]

Model.aggregate(*pipeline)

使用 PyMongo 的演示:

>>> import pprint
>>> import pymongo
>>> client = pymongo.MongoClient()
>>> collection = client['test']['collection']
>>> pipeline = [{'$project': {'category': 1,
... 'name': 1,
... 'w': {'$cond': [{'$eq': ['$category', 'B']},
... 1,
... {'$cond': [{'$eq': ['$category', 'C']},
... 2,
... 3]
... }]
... }
... }},
... {'$sort': {'w': 1}}
... ]
>>> pprint.pprint(list(collection.aggregate(pipeline=pipeline)))
[{'_id': ObjectId('571caa930e4f55302502a361'),
'category': 'B',
'name': '456',
'w': 1},
{'_id': ObjectId('571caa930e4f55302502a363'),
'category': 'C',
'name': '101',
'w': 2},
{'_id': ObjectId('571caa930e4f55302502a360'),
'category': 'A',
'name': '123',
'w': 3},
{'_id': ObjectId('571caa930e4f55302502a362'),
'category': 'A',
'name': '789',
'w': 3}]

关于python - 按一个键的值对mongodb进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797359/

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