如何用“LIKE”和“NOT LIKE”查询MongoDB?

时间:2011-07-17 09:45:48

标签: php mongodb

我有一个像这样的数组

array(
  'ts' : 123456789,
  'nm' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
)
...
array(
  'ts' : 122345678,
  'nm' : 'Nulla lorem purus, pretium porttitor ultricies sit amet, rutrum sollicitudin risus.'
)

如何查找包含' amet '且在'nm'中不包含' ipsum '的元素? 如何查找包含' amet '和' ipsum '的元素?

2 个答案:

答案 0 :(得分:2)

Mongo与LIKE最接近的是正则表达式:

db.my_collection.find({nm: /amet/})

但我不认为你可以做你要求的事情,除非你能写一个捕获你的查询的包含和不包含部分的正则表达式。

也就是说,就像LIKE一样,Mongo的正则表达式查询不具备性能。如果您需要全文搜索,您应该查看像Solr或内置全文索引的数据库。

答案 1 :(得分:2)

我的解决方案

array(
  'nm' => array(
    '$all' => array(new MongoRegex('/amet/'), ...),
    '$nin' => array(new MongoRegex('/ipsum/'), ...)
  )
)