2016-09-05 15 views
0

私はPHPでMongoDBに基づいてアプリケーションを構築しています。 私は、そのドキュメントが持っている "parameters"というコレクションを持っています。とりわけ、オブジェクトを含む "included"という配列があります。

"parameters"ドキュメント(変数$ gidの値に基づいて)にアクセスする集約コマンドを実行しようとしており、各 "included"配列要素をそれ自身のドキュメントに変換しようとしています。目標は集約パイプのさらなるステップを実行することですが、私が持っている問題は$ unwindであるので、わかりやすくするためにここにそれらを追加していません。

$results = $collection->aggregate(array(
     array('$match' => array('_id' => new MongoId($gid))), 
     array('$project' => array('included' => 1)), 
     array('$unwind' => array('$included')) 
    )); 

これはアプリケーションの別の同様のケースで動作します。何らかの理由でこの場合エラーが発生します。

PHP Fatal error: Uncaught exception 'MongoResultException' with message 'localhost:27017: expected either a string or an object as specification for $unwind stage, got Array'

パラメータの文書:

に述べたように
db.parameters.findOne() 
{ 
    "_id" : ObjectId("57cd573a216985ced0c66bd2"), 
    "name" : "Domains", 
    "keywords" : [ ], 
    "included" : [ 
     { 
      "instance_id" : ObjectId("57cb2ffd216985ced0c66bcb"), 
      "category" : null 
     } 
    ], 
} 

、それは別のシナリオでは正常に動作します(異なるコレクション/文書が、同じ - 文書の配列)。何らかの理由で、今問題が発生しています。どんな助けもありがとう。

答えて

1

これに遭遇する可能性がある他の人のために、私がしたのと同じ間違いを返す。 問題は '$ included'値を配列として送信することでした。 :

array('$unwind' => '$included') 
関連する問題