4

私がこの文書を持っているコレクション「果物」を考えてみましょう(ところで、私はPythonのpymongoドライバーを使用しています):

{
    '_id'       : 'lemons',
    'weight'    : 58,
    'shape'     : 'oval',
    'countries' : ['Mexico', 'Turkey', 'Argentina', 'SAfrica', 'US']
}

ここで、「countries」フィールドのみを取得したい場合は、次のクエリで問題なく動作します。

In [1]: find_one('lemons', { 'countries' : 1, '_id' : 0 })
Out[1]: {u'countries': [u'Mexico', u'Turkey', u'Argentina', u'SAfrica', u'US']}

しかし、私が本当に必要としているのは、すべてではなく、いくつかの上位国のリストだけであることが判明したため、単純な True/1 の代わりに「$slice」を使用しています。

In [239]: c.find_one('lemons', { 'countries' : { '$slice' : [0, 3] }, '_id' : 0 })
Out[239]: 
{u'countries': [u'Mexico', u'Turkey', u'Argentina'],
 u'shape': u'oval',
 u'weight': 58}

まあ、国の数は減りましたが、今では他にもたくさんの無関係な情報を得ることができます!

Q:要求したフィールドのみを表示する方法はありますか? さらに、「_id」を例外としてリストすることは問題ありません。このフィールドは常に表示されるためですが、MongoDB にはスキームがなく、必要に応じてこの機能を使用してフィールドを追加するつもりであるため、他のフィールドについてはわかりません。

4

2 に答える 2

12

別の包含投影を追加しようとしましたか? foo:1 (実際のフィールドではない) のような簡単なものを追加できると思いますが、それは機能するはずです。

そのようです:

{ 'countries' : { '$slice' : [0, 3] }, '_id' : 0, foo : 1 }

うまくいかない場合は、mongo でバグを報告することをお勧めします。実際、彼らはバグへの対応が非常に優れています。

于 2013-04-03T21:04:01.703 に答える