2

sharesオブジェクトの配列であるという名前のプロパティを含むドキュメント構造があります。ここで、一致する文字列をドット表記 ( ) でshared含むすべてのドキュメントを一致させようとしました。_accountshares._account

_動作していませんが、プロパティの前の char が原因のよう_accountです。したがって、検索する文字列をそのオブジェクトの name プロパティ内に配置すると、ドット表記ですべてが正常に機能します。

プロパティ名に制限はありますか? はmongodbにも_あるため、許可されてidいると考えました。私にとっては、バインディングをダクレアするための一種の規則です。

例:

    // Collection Item example
{
  "_account": { "$oid" : "526fd2a571e1e13b4100000c" },
  "_id": { "$oid" : "5279456932db6adb60000003" },
  "name": "shared.jpg",
  "path": "/upload/24795-4ui95s.jpg",
  "preview": "/img/thumbs/24795-4ui95s.jpg",
  "shared": false,
  "shares": [
    {
      "name": "526fcb177675f27140000001",
      "_account": "526fcb177675f27140000001"
    },
    {
      "name": "tim",
      "_account": "526fd29871e1e13b4100000b"
    }
  ],
  "tags": [
    "grüngelb",
    "farbe"
  ],
  "type": "image/jpeg"
},

次のクエリでアイテムを取得しようとしました:

// Query example
{
    "$or": [
        {
            "$and": [
                {
                    "type": {
                        "$in": ["image/jpeg"]
                    }
                }, {
                    "shares._account": "526fcb177675f27140000001"    // Not working
                    //"shares.name": "526fcb177675f27140000001"    //   Working

                }
            ]
        }
    ]
}
4

2 に答える 2

0

現在のクエリには、不必要に複雑な構造がいくつかあります。

  • $orand$and句は必要ありません(「and」がデフォルトの動作です)。
  • を使用して単一の値を照合しています$in

クエリがデータと一致しないため、クエリはサンプル ドキュメントと一致しません。

  • type探しているフィールドは「image/jpg」ですが、サンプル ドキュメントには「image/jpeg」があります
  • shares._account探している値は「526fcb177675f27140000001」ですが、サンプル ドキュメントにはこれが含まれていません。

機能するはずの単純化されたクエリは次のとおりです。

db.shares.find(
    {
        "type": "image/jpeg",
        "shares._account": "526fcb177675f27140000002" 
    }
)
于 2013-11-05T21:22:55.987 に答える