2011-08-03 43 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

請告訴我,如果最後的編輯更容易理解.. –