2012-08-24 173 views
1

我的問題是如何可以轉化爲PHP從mongodb的以下js代碼:元素匹配的mongodb PHP

t.find({組:3, 'x.a':2},{「× 。'':1}).toArray()[0] .x.length, 「single object match(array length match)」);

您可以在整個js代碼:

https://github.com/mongodb/mongo/blob/83ec59844bdd629b2b32a9791a4e7a0e93516c02/jstests/elemMatchProjection.js

基本上我關心的是我怎麼能轉化爲PHP指定者()[0] .x.length ?我知道PHP有數,但我不在乎這一點。我有其他高級查詢,所有這些都減少到這個問題。

回答

1

toArray()[0].x.length直譯是:

$cursor = $collection->find(['group' => 3, 'x.a' => 2], ['x.$' => 1]); 
$documents = iterator_to_array($cursor, false); 
count($documents[0]['x']); 

或者,它會更容易在上面的例子中使用MongoCollection::findOne(),因爲我們只與第一個結果工作和忽略任何人。改寫:

$document = $collection->findOne(['group' => 3, 'x.a' => 2], ['x.$' => 1]); 
count($document['x']); 

我沒有按照你的意思,「我知道PHP有計數,但我不在乎那個。」除非您指的是MongoCollection::count(),否則必須使用基本的count()來計算返回文檔中數組的長度。

+0

我知道我可以這樣做,但這是唯一的可能性嗎?我雖然也許有什麼是返回我想要的確切數組,只是爲了表現。或者不會真的影響性能? – Cezar

+0

字段選擇仍將返回頂層文檔上下文中的所有內容。理論上你可以使用MongoDB來轉換結果(例如[聚合框架](http://docs.mongodb.org/manual/applications/aggregation/)或服務器端的JS),但那不會有效。 – jmikola