MongoDBシェルから集約をMongoidをODMとして使用するルビコードに変換しようとしています。集計を使用して配列サイズをカウントするにはmongoidを使用してください
私はこのようないくつかの書類(非常に単純化した例を)持っている:
{
"name": "Foo",
"tags": ["tag1", "tag2", "tagN"]
},
{
"name": "Bar",
"tags": ["tagA", "tag2"]
},
...
今私は名前フィールドを持つすべての文書およびそれぞれのタグの合計数を取得したいのですが。
db.documents.aggregate(
{$project: {name: 1, tags_count: {$size: $tags}}
)
そして、それが返されます:私はこのような集約フレームワークを使用してそれを達成することができMongoDBのシェルで
今
[{"name": "Foo", "tags_count": 3},
{"name": "Bar", "tags_count": 2}]
イライラ一部を、私は同じことを実現しようとしていますMongoidをODMとして使用しているレールアプリ内でクエリを実行します。
コードは(レールコンソールを使用して)次のようになります。
Document.collection.aggregate(
[
{'$project': {name: 1, tags_count: {'$size': '$tags'}}}
]
).to_a
そして、それは次のエラーを返します。
Mongo::Error::OperationFailure: The argument to $size must be an Array, but was of type: EOO (17124)
私の質問は:どのように私はMongoidは$tags
がに言及していることを理解させることができます正しいフィールド?コードから抜けているのは何ですか?
ありがとう
データに実際に配列が含まれていないか、または一貫していないように見えます。同様の理由で、同じデータのシェルで同じステートメントが失敗するはずです。 –