【问题标题】:Pymongo, query on list field, and/orPymongo,查询列表字段,和/或
【发布时间】:2012-08-17 09:11:44
【问题描述】:

我有一个包含一些文档的集合,例如:

{
    _id: 5,
    vals: [100, 1100, 1500]
},
{
    _id: 10,
    vals: [1100, 1700]
}

如何查询具有vals 字段的文档:

  • 1100
  • 1700 或 100
  • 100 和 1100

我可以使用一些理解魔法,例如:

g = lambda codes: (
    d for d in collection.find() if any(code in d["vals"] for code in codes)
)
g([100, 1700]).next()

或者,对于 AND:

g = lambda codes: (
    d for d in collection.find() if all(code in d["vals"] for code in codes)
)
g([100, 1100]).next()

这似乎有点笨拙,但如果有一些发现魔法可以用驱动程序完成。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:
    yourmongocoll.find({"vals":1100})
    yourmongocoll.find({"$or":[ {"vals":1700}, {"vals":100}]})
    yourmongocoll.find({"$and":[ {"vals":100}, {"vals":1100}]})
    

    我会推荐阅读Mongodb Advanced queries

    你还会发现$in ...有用

    【讨论】:

    • 虽然不能很好地扩展到 vals 的 10 倍。
    • @SkylarSaveland 如果您使用列表理解,它确实可以扩展到 10 秒甚至 1,000 秒。例如,如果您有一个值列表; values = [100,1100,1700],那么您的代码如下所示 yourmongocoll.find({"$and": [{"vals": val} for val in values] })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2022-01-15
    • 2019-05-05
    • 2020-08-31
    相关资源
    最近更新 更多