Py学习  »  MongoDB

我能按字典的键查询MongoDB吗?

sds • 6 年前 • 1310 次点击  

假设我的收藏 c

{ "_id": 1, "mydict":{"foo":..., "bar":..., "baz":..}, ...}
{ "_id": 2, "mydict":{"foo":..., "quux":..., "zot":..}, ...}
{ "_id": 3, "mydict":{"fuu":..., "quux":..., "xxx":..}, ...}

我想选择那些 任何 给定集合中的键,例如。, ["baz","zot"] ,在 mydict 字段。

我可以写一些像

c.find(query={
    "$or":[
        {"mydict.baz":{"$gt":0}},
        {"mydict.zot":{"$gt":0}},
    ]})

但是键的列表将比2大得多,所以我更喜欢更紧凑的内容(当然,我可以生成查询,但这不是重点)。

密迪克特 ?

有什么像

c.find(query={"$keys(mydict)":{"$intersect":["foo","bar","xxx","yyy","zzz"]}})
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55953
文章 [ 1 ]  |  最新文章 6 年前
Tunmee
Reply   •   1 楼
Tunmee    6 年前

您可以编写一个简单的函数,将键列表转换为键到通配符值的映射。这是Javascript中的一个示例(抱歉,我不是python用户):

function mapKeys (keys) {
  const mappedKeys = keys.map(function(key) {
    return {
      // Note that I'm using the $exists here instead of $gt as
      // $exists actually checks if the field exists
      [`mydict.${key}`]: { "$exists": true }
    }
  })
  return mappedKeys;
}

c.find(query={
    "$or": mapKeys(["foo","bar","xxx","yyy","zzz"])
})