0

それぞれがコメント ドキュメントのネストされた配列を持つスレッドのコレクションを持っています。ID に基づいて 1 つのコメント ドキュメントだけを返したい。スレッドIDとコメントIDがあります。残念ながら、私はそれを行うことができないようです-周りを検索すると、次のようになりましたが、エラーが発生します。

{ [MongoError: サポートされていないプロジェクション オプション: $elemMatch] name: 'MongoError' }

これは非常に典型的な使用例のように思えますが、どこが間違っているのか誰か指摘できますか?

       var thread_id =  vo.thread_id;
       var _id =  vo._id;
       threads.model.find({_id:thread_id}).select({ comments: { $elemMatch: {_id:_id}}}).exec(function (err, thread) {
                    console.log("***************************************");
                    console.log(err);
                    console.log(thread);
                    done();
                });
4

1 に答える 1

1

残念ながら、MongoDB (したがって Mongoose) は現在、その操作を直接サポートしていません。MongoDB には配列の要素を 1 つだけ返す機能がないため、Mongoose もそれをサポートしていません。slice(たまたま配列項目のインデックスを持っていたとしても、 (ドキュメント)を使用できます)。

さらに、このselect関数は、含める/除外するフィールドのリストのみを受け取ります ( documentation )。この関数は、MongoDBの射影select機能にマップされます。MongoDB オペレーターは使用できません。

あなたはselect('comments') for example to only include the comments field from the document. But, this would return the entire array ofコメントをすることができます。探している特定のコメントを抽出するには、クライアント側のフィルタリングを行う必要があります。

配列から特定の要素を追加できるようにする機能を追加するオープン リクエストがここにあります

Aggregation Framework (こちら) を試すことをお勧めする人もいるかもしれません。

于 2013-08-23T12:14:32.270 に答える