2011-08-03 38 views
0

有什么办法可以修改find​​查询中where-clause中的mongo值吗?如何在查询中的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子句中使用的数据库中的值。

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

EDIT2:

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

你想实现什么?我不明白你的榜样。 –

回答

1

你的问题是有点暧昧,你要么寻找update(这个只是更新):

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

findAndModify(这个更新和检索)

编辑:

只需在客户端进行转换。 MongoDB的理念是尽可能多的工作推送到客户端作为possible.e

EDIT2:

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

因此无法在where子句中修改数据库中的值? –

+0

呃..如果你告诉我们你想要达到的目标会更好。是的,我看到你提供了一个例子,但我不明白它的一个词。 –

+0

请告诉我,如果最后的编辑更容易理解.. –