0

コレクションのすべてのクエリに対して基本的に射影規則を適用する方法はありますか? たとえば、 collectionがある場合、クエリが明示的に要求しない限り、ドキュメントに存在widgetするフィールドsecretAttributeがデフォルトでクエリに返されないようにする方法はありますか? 投影パラメーターが明示的に拒否しない限り、自動的に投影されるprojection方法とは反対の種類です。_idたとえば、次のwidgetドキュメントがあるとします。

{ _id: '51a4e3962dfff00105000009', name: 'foo', color: 'white', status: 'open', secretAttribute: 'bar' }

私が行うdb.widget.find({color: 'white'})と、ドキュメントが返されますが、表示されませsecretAttributeん:

{ _id: '51a4e3962dfff00105000009', name: 'foo', color: 'white', status: 'open' }

secretAttributeへのprojection引数で明示的に要求する必要がありfind()ます。

db.widget.find({color: 'white'}, {name:1, color:1, status: 1, secretAttribute: 1})それを得るために。

ありがとう

4

2 に答える 2

1

現在、これを行う方法はありません。フィールドが大きく、通常は必要ない場合は、別のコレクションに格納することを検討できます (必要な場合は 2 回目の読み取りが必要ですが、サイズによっては全体的にリソースを節約できる可能性があります)。

于 2013-07-27T02:24:42.430 に答える
1

あなたが求めていることは、現在不可能です。私のアプリケーションでは、オブジェクトの軽量バージョンを memcached に保持しています。たとえば、この場合、widgetLite オブジェクトを作成して memcache に保持できます。オブジェクトには ID、名前、色、およびステータスのみが含まれる場合があります。ほとんどの場合、widgetLite オブジェクトだけを取得する必要があり、memcache から取得すると非常に高速になり、db クエリの数が大幅に減るため、パフォーマンスが向上します。

于 2013-07-27T04:50:04.020 に答える