跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • MongoDB 对某列去重后,查询该列对应的另外一值是否都为 xx
未分類
2020 年 10 月 31 日

MongoDB 对某列去重后,查询该列对应的另外一值是否都为 xx

MongoDB 对某列去重后,查询该列对应的另外一值是否都为 xx

資深大佬 : Te11UA 3

数据形如

[ {'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 

请问大佬们,有什么好的办法可以完成这个需求呢

大佬有話說 (3)

  • 資深大佬 : catinsides

    “`
    aggregate([
    {
    $group: {
    _id: ‘$group_id’,
    statusAry: {
    $addToSet: ‘$status’
    }
    }
    },
    {
    $addFields: {
    len: {
    $size: ‘$statusAry’
    }
    }
    },
    {
    $addFields: {
    results: {
    $cond: { if: { $eq: [ “$len”, 1 ] }, then: true, else: false }
    }
    }
    }
    ])
    “`

  • 資深大佬 : catinsides

    MongoDB 对某列去重后,查询该列对应的另外一值是否都为 xx 没判断全是 bad

  • 資深大佬 : lithiumii

    你这个是 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

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具