gpt4 book ai didi

mongodb - 查找 mongo 文档同时忽略重复值 mongo 端

转载 作者:可可西里 更新时间:2023-11-01 10:50:08 28 4
gpt4 key购买 nike

(问题灵感来自this one)

给定一个数据集:

db.mycollection.insert([
{a:1, b:2, c:3},
{a:1, b:3, c:4},
{a:0, b:1, c:3},
{a:3, b:2, c:4}
{a:4, b:1, c:4}
])

我想为一个键的给定值(比如 a 应该在 0 到 3 之间)找到一个并且只有一个文档,并忽略对该值的后续查找,即如果文档具有已经找到 a 的值 1,搜索不应再返回任何包含 1 作为 a 键值的文档。结果的顺序可以由另一个键的值确定。

在我们的示例中,预期输出将是:

# Findings are sorted by value of the b key
[{a:0, b:1, c:3}, {a:3, b:2, c:4}, {a:1, b:2, c:3}]

这是我处理的代码,然后我不得不从我这边而不是 mongo 边删除重复项。

import pymongo, pandas

result = dict(db.mycollection.find({'a': {'$in': [i for i in range(4)]}}).sort('b', pymongo.ASCENDING))

print(result)
>>> [{a:0, b:1, c:3}, {a:3, b:2, c:4}, {a:1, b:2, c:3}, {a:1, b:3, c:4}]

由于我处理的集合可能包含数百万个文档,因此我需要在 mongo 端完成“忽略重复项”部分,以节省内存和数据传输时间。

最佳答案

来自 Veeram 的评论:

l = [i for i in range(4)]

result = db.mycollection.aggregate([{'$sort': {'b': 1}},
{'$group': {
'_id': '$a',
'data': {'$first': '$$ROOT'}
}
},
{'$match': {'_id': {'$in': l}}}])

result_list = [i['data'] for i in result]

print(result_list) # Omitted the ObjectId that should appear too
>>>[{'a': 3, 'b': 2, 'c': 4},
{'a': 1, 'b': 2, 'c': 3},
{'a': 0, 'b': 1, 'c': 3}]

这似乎对我有用,你只需要注意你的结果不一定按 'b' 键排序,因为它在查看 'b' 的顺序之前迭代 'a' 键。

关于mongodb - 查找 mongo 文档同时忽略重复值 mongo 端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135635/

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