今、私は2つのアプローチで考えることができます:
1)集約フレームワークの使用:
db.log.aggregate([ { $unwind : "$entries" }, { $group : { _id : "$_id", entries : {$sum:1} } } ]);
2)または、エントリ数を保持するフィールドをドキュメントに追加できます。したがって、新しい値をエントリ配列にプッシュするたびに、カウンタをインクリメントする必要があります。更新は次のようになります:
db.log.update({ _id : 123 }, { $push : { entries : 'value' }, $inc : { entriesCount : 1 } })
明らかに、ここにはトレードオフがあります。集約フレームワークは、この単純な操作にはコストがかかりすぎます。ただし、ドキュメントにフィールドを追加すると、更新のたびにカウンターが増加するはずです。
IMHO、回避策のように見えますが、カウンターはより合理的に見えます。