Pymongo,查询列表字段,和/或

Sky*_*and 18 python mongodb pymongo

我有一些文件,如:

{
    _id: 5,
    vals: [100, 1100, 1500]
},
{
    _id: 10,
    vals: [1100, 1700]
}
Run Code Online (Sandbox Code Playgroud)

如何在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()
Run Code Online (Sandbox Code Playgroud)

或者,对于AND:

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

虽然如果有一些可以用驱动程序完成的魔法,这似乎有点笨拙.

loc*_*jay 50

yourmongocoll.find({"vals":1100})
yourmongocoll.find({"$or":[ {"vals":1700}, {"vals":100}]})
yourmongocoll.find({"$and":[ {"vals":100}, {"vals":1100}]})
Run Code Online (Sandbox Code Playgroud)

我建议阅读Mongodb Advanced查询

你也会发现$ in ...很有用

  • 虽然不能很好地扩展到10秒的`vals`. (2认同)
  • @SkylarSaveland 如果您使用列表理解,它确实可以扩展到 10 秒甚至 1,000 秒。例如,如果您有一个值列表;value = [100,1100,1700],那么你的代码看起来像这样 yourmongocoll.find({"$and": [{"vals": val} for val in values] }) (2认同)