我如何才能找到与其中对象的字段包含的子数据库中的所有对象?
如果字段是与一个字符串值的集合对象:
我想找到的分贝“数据库”,其中A包含一个子说“ABC DEF”的所有对象。
我试过了:
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
但没有奏效
UPDATE
一个真正的字符串(Unicode格式):
Sujet Commentaire sur Star Wars Episode III - La Revanche des Sith 1
需要寻找与星球大战中的所有条目
db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring
取而代之的是:
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
你应该做这个:
db.database.find({A: /abc def/i })
^ *实际上不是有效的语法^和$是锚,而不是东西是重复的。 你可能是指^ *在这里。 但是没有必要^ *为仅仅意味着“一切行动后的字符”和(ABC DEF)*表示“零次或多次‘ABC DEF’,但它必须是在字符串的结束,因为你的$的。“我”在结尾是使其不区分大小写。
只要使用字符串“星球大战”和$regex
将做休息
db.test.find({A: {$regex: 'Star Wars'}})
$regex
太贵/慢的大集合。
我建议利用聚合框架和$ indexOfCP 。
db.test.aggregate([{$match:
{$expr: { $gt: [{ $indexOfCP: [ "$A", "Star Wars" ] }, -1]}}
}, {$project: {A:1}}])
对于不区分大小写的搜索您可以添加$toUpper
进来并搜索STAR WARS
。