数据形如
[
{'status':'ok','message_id': '1', 'group_id':1},
{'status':'bad','message_id': '2', 'group_id':1},
{'status':'ok','message_id': '1', 'group_id':2}
],
需求是要判断当前库中同一 group 的 status 都为 ok,有一个 bad 则返回 False 。由于不太熟悉 MongoDB,使用了比较难看的做法:
group_ids = db.tasks.distinct('group_id')
for group_id in group_ids:
____status = db.tasks.find_one({'group_id': group_id, 'status': 'bad'})
____return False if task else True
请问大佬们,有什么好的办法可以完成这个需求呢
1
catinsides 2020-10-28 22:57:17 +08:00
```
aggregate([ { $group: { _id: '$group_id', statusAry: { $addToSet: '$status' } } }, { $addFields: { len: { $size: '$statusAry' } } }, { $addFields: { results: { $cond: { if: { $eq: [ "$len", 1 ] }, then: true, else: false } } } } ]) ``` |
2
catinsides 2020-10-28 22:59:31 +08:00
没判断全是 bad
|
3
lithiumii 2020-10-28 23:02:10 +08:00
你这个是 pymongo ?如果可以在 py 里做的话
group_ids = db.tasks.distinct('group_id') bad_ids = db.tasks.find({'status':'bad'}).distinct('group_id') good_ids = [x for x in group_ids if x not in bad_ids] 或者用 MongoDB 的 aggregation |