2

このドキュメントを含むデータベースがあります:

{"_id":{"$id":"xxx"},"duration":{"sec":137,"usec":0},"name":"test"}

このパイプラインで db.collection.aggregate を呼び出すと:

{$project:{_id: 0, name: 1, duration: 1, seconds: "$duration.sec"}}

私はこの結果を得ます:

{"result":[{"duration":{"sec":137,"usec":0},"name":"test"}],"ok":1}

結果に「秒」フィールドがないのはなぜですか? 間違った射影構文を使用しましたか?

サーバーが実行しているmongodbのバージョンが完全にはわかりません。私は 1.3.1 php ドライバーを php 5.4.3 で使用していますが、サーバーはそれより古い可能性があります - おそらく半年くらいですか?

4

2 に答える 2

3

$projectに関するMongoDBのドキュメントによると:

$project を使用してフィールドの名前を変更することもできます。次の例を検討してください。

db.article.aggregate(
 { $project : {
     title : 1 ,
     page_views : "$pageViews" ,
     bar : "$other.foo"
 }} );

この操作により、pageViews フィールドの名前が page_views に変更され、他のサブドキュメントの foo フィールドの名前が最上位のフィールド バーとして変更されます。

その例は、あなたがやろうとしていることとかなりよく一致しているようです。

10gen が MongoDB v2.2 でアグリゲーション フレームワークを正式にリリースしたことは知っています。現在の製品リリースを確認してください。これは 2.2.3 だと思います。以前の開発バージョンで実行している場合、集計で奇妙なことが起こっている可能性があります。

于 2013-03-13T18:58:46.670 に答える