首页 > 解决方案 > 列表中的mongo查询正则表达式

问题描述

我有一个包含列表字段的集合。列表字段包含 URL。我想搜索该字段并提取该模式出现在列表中至少一个元素中的所有文档。这是我的第一次尝试。

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

这将返回零个文档,但我知道在许多情况下条件是正确的。MongoDB 的文档指出我不能在列表中使用 $regex 运算符,但我可以使用 js 对象正则表达式。根据 MongoDB 和一个关于 js regex 的快速谷歌搜索,我写了一个封装在 // 中的模式。所以我相信我正确使用了 js 正则表达式,但没有运气。有任何想法吗?

标签: mongodbmongodb-querypymongo

解决方案


假设我们有一个名为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.*/})

或者

db.so.find({urls: {$regex: "^apple.*"}})

结果如下所示:

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

推荐阅读