如何在查询中的where子句中修改Mongo值?

时间:2011-08-03 08:57:31

标签: php where-clause mongodb

有没有办法在find查询的where子句中修改mongo值?

这是我现在使用的那个:

$db->users->findOne(array("redirect_uri" => $arrParsedUrl['host']));
  • 在这种情况下,我需要确保先前插入数据库的值只是URL的主机部分。

我想做的就是像这样(但它不起作用):

$db->users->findOne(array(parse_url("redirect_uri")['host'] => $arrParsedUrl['host']));
  • 在这种情况下,我可以从头开始在数据库中插入完整的URL。查询中的“parse_url”函数确保仅实际比较主机部分。

任何想法如何实现类似的东西?

编辑: 我不想更新数据库中的值。仅修改where-clause中使用的数据库中的值,该值与输入值进行比较。

输入值将始终是URL的主机部分。

EDIT2:

  1. 我在一个名为users的集合中有几个文档。
  2. 所有文档都有一个名为“redirect_uri”的字段,其中包含一个URL。
  3. 当我使用url作为输入调用php函数时,我想返回文档,其中输入URL的主机部分与文档中“redirect_uri”的主机部分相同。 例如。 http://www.foo.com/bananas(“redirect_url”)= http://www.foo.com/apples(输入网址)
  4. 如何查询MongoDB以获取“redirect_url”的主机部分与输入URL的主机部分相同的文档?修改输入URL到www.foo.com不是问题,但如何以相同的方式修改“redirect_url”部分以使查询给出正确答案?

1 个答案:

答案 0 :(得分:1)

你的问题有点含糊不清,你要么找update(这只是更新):

db.collection.update( criteria, objNew, upsert, multi );

findAndModify(此更新并检索)

编辑:

只需在客户端进行转换即可。 mongoDB的理念是尽可能多地向客户推送工作。

EDIT2:

  • 您可以使用regular expressions
  • 您可以重构数据库以将主机存储在单独的字段中。