1

以下のデータ構造のクラスの名前だけを返すクエリを作成したいと思います。これまでのところ、最も近いのはドット表記を使用することです

db.mycoll.find({name:"game1"},{"classes.1.name":true})

しかし、このアプローチの問題は、最初のクラスの名前しか返さないことです。3 つのクラスすべての名前を教えてください。

以下のようにワイルドカードを使用できればいいのですが、それが存在するかどうかはわかりません。

db.mycoll.find({name:"game1"},{"classes.$*.name":true})

データ構造:

{
"name" : "game1",
"classes" : {
    "1" : {
        "name" : "warlock",
        "version" : "1.0"
    },
    "2" : {
        "name" : "shaman",
        "version" : "2.0"
    },
    "3" : {
        "name" : "mage",
        "version" : "1.0"
    }
}
4

1 に答える 1

1

求めている結果を達成する単純なクエリはありません。MongoDB では、サブオブジェクトまたはオブジェクトの配列に対するクエリのサポートが制限されています。MongoDB の基本的な前提は、最上位のドキュメントに対してクエリを実行することです。

とはいえ、状況は変化しており、まだいくつかのオプションがあります。

  1. 新しいMongoDB Aggregation Frameworkを使用します。これには、$project探していることを行う操作があります。
  2. フィールドだけを返してから、一緒classesにマージすることができます。namesこれは、ほとんどの言語で些細なことです。

で何をしているのかは明確ではないことに注意してくださいclasses。これは配列ですか、それともオブジェクトですか? それがオブジェクトである場合、classes.1実際には何を表していますか? とは違うのclasses.warlockですか?

于 2012-07-31T20:07:55.857 に答える