Mongodb mongo查询列表中的正则表达式

Mongodb mongo查询列表中的正则表达式,mongodb,mongodb-query,pymongo,Mongodb,Mongodb Query,Pymongo,我有一个包含列表字段的集合。列表字段包含URL。我希望搜索该字段,并从列表中至少有一个元素中显示该模式的所有文档中取出该模式。这是我第一次尝试 query = collection.find({ 'third_party_urls' : {'$in' : ['/.woff/']} }) 这将返回零个文档,但我知道这种情况在许多情况下都是正确的。声明我不能在列表中使用$regex操作符,但我可以使用js对象regex。根据MongoDB和关于js regex的快速google搜索,我编写了一个封

我有一个包含列表字段的集合。列表字段包含URL。我希望搜索该字段,并从列表中至少有一个元素中显示该模式的所有文档中取出该模式。这是我第一次尝试

query = collection.find({
'third_party_urls' : {'$in' : ['/.woff/']}
})

这将返回零个文档,但我知道这种情况在许多情况下都是正确的。声明我不能在列表中使用$regex操作符,但我可以使用js对象regex。根据MongoDB和关于js regex的快速google搜索,我编写了一个封装在//中的模式。所以我相信我正确地使用了js正则表达式,但是运气不好。有什么想法吗?

假设我们有一个名为
so
的收藏。我们在mongo shell中使用以下命令插入多个文档:

db.so.insert({urls: ["apple", "banana"]})
db.so.insert({urls: ["apple2", "banana2"]})
db.so.insert({urls: ["apple3", "banana3", "cherry"]})
db.so.insert({urls: ["mongo"]})
然后,我们可以通过发布以下命令找到至少有一个元素以
apple
开头的所有文档:

db.so.find({urls: /^apple.*/})

结果如下:

{ "_id" : ObjectId("5ef6829b25a20c5a694d8522"), "urls" : [ "apple", "banana" ] }
{ "_id" : ObjectId("5ef682a525a20c5a694d8523"), "urls" : [ "apple2", "banana2" ] }
{ "_id" : ObjectId("5ef682d425a20c5a694d8524"), "urls" : [ "apple3", "banana3", "cherry" ] }

MongoDB隐式地执行数组元素匹配,您不需要$in进行匹配,MQL中的$in与SQL in具有不同的含义。$regex答案有效,而另一个答案无效。有趣的是,因为Mongo说不能在列表中使用$regex操作符。
{ "_id" : ObjectId("5ef6829b25a20c5a694d8522"), "urls" : [ "apple", "banana" ] }
{ "_id" : ObjectId("5ef682a525a20c5a694d8523"), "urls" : [ "apple2", "banana2" ] }
{ "_id" : ObjectId("5ef682d425a20c5a694d8524"), "urls" : [ "apple3", "banana3", "cherry" ] }