2

次の構造のデータを含むmonogoDBがあります。

{   "Locales" : {
    "Invariant" : {
      "Checksum" : "7B4C15B697AAFC1484679076667267D2",
      "Metadata" : {
        "app" : {
          "@appType" : "app",
          "@id" : "284896113",
          "categories" : {
            "category" : [{
                "@id" : "6011",
                "@parentid" : "36",
                "@type" : "GENRE",
                "##text##" : "Music"
              }, {
                "@id" : "6016",
                "@parentid" : "36",
                "@type" : "GENRE",
                "##text##" : "Entertainment"
              }],
            "##category" : null
          },
          "rating" : "2.5",
          }
        }
      },
      "ModifiedDate" : ISODate("2012-09-07T09:07:58.218Z")
    }   },   "_id" : "selection/live/app(284896113)"

私のデータベースには約100,000個あります。私はいくつかのことを知る必要があります。最初に「categories」配列を持っているものがいくつあり、次にそれらの下に1つ以上の「category」配列を持っているものがいくつあり、最後に、##text##の値を持っているものがいくつありますか。

乾杯

4

1 に答える 1

2

$existsを使用できます。

db.things.count( { 
   'Locales.Invariant.Metadata.app.categories': {$exists: true }} );

db.things.count( { 
   'Locales.Invariant.Metadata.app.categories.category': {$exists: true }} );

db.things.count( { 
   'Locales.Invariant.Metadata.app.categories.category.##text##': 
      {$exists: true }} );

これにより、一致の数ではなく、ドキュメントの数が返されることに注意してください。この例では、「2」ではなく1つのドキュメントがあるため(## text ##が2回出現する場合)、「1」が返されます。

于 2012-09-21T12:12:57.227 に答える