0

次のようなデバイスに関する情報を保存したコレクションがあります。

/* 1 */
{
  "_id" : {
    "startDate" : "2012-12-20",
    "endDate" : "2012-12-30",
    "dimensions" : ["manufacturer", "model"],
    "metrics" : ["deviceCount"]
  },
  "data" : {
    "results" : "1"
  }
}

/* 2 */
{
  "_id" : {
    "startDate" : "2012-12-20",
    "endDate" : "2012-12-30",
    "dimensions" : ["manufacturer", "model"],
    "metrics" : ["deviceCount", "noOfUsers"]
  },
  "data" : {
    "results" : "2"
  }
}

/* 3 */
{
  "_id" : {
    "dimensions" : ["manufacturer", "model"],
    "metrics" : ["deviceCount", "noOfUsers"]
  },
  "data" : {
    "results" : "3"
  }
}

そして、一意になる_idフィールドを使用してドキュメントをクエリしようとしています。私が抱えている問題は、次のようにすべての異なる属性を照会するときです。

db.collection.find({$and: [{"_id.dimensions":{ $all: ["manufacturer","model"], $size: 2}}, {"_id.metrics": { $all:["noOfUsers","deviceCount"], $size: 2}}]});

これは2つと3つのドキュメントに一致します(属性値の順序は関係ありません)が、3つだけを取得したいと思います。検索クエリで指定した属性以外の属性が_idに存在してはならないことをどのように言うことができますか?

お知らせ下さい。ありがとう。

4

1 に答える 1

4

_id.dimensions残念ながら、クエリ結果を順序付けされていないものと順序付けられていないものに絞り込むには、サブドキュメント フィールド_id.metrics内の他の可能なフィールドを知る必要があると思います_idstartDateendDate

db.collection.find({$and: [
    {"_id.dimensions":{ $all: ["manufacturer","model"], $size: 2}}, 
    {"_id.metrics": { $all:["noOfUsers","deviceCount"], $size: 2}},
    {"_id.startDate":{$exists:false}},
    {"_id.endDate":{$exists:false}} 
]});

で可能なフィールドのセットがわからない場合_id、他の可能な解決策は、必要なものを正確に指定する_idことです。

db.collection.find({"_id" : {
    "dimensions" : ["manufacturer", "model"],
    "metrics" : ["deviceCount", "noOfUsers"]
}})

_id.dimensionsしかし、これはとの順序_id.metricsが重要であることを意味します。この最後のクエリは、 の正確な BSON 表現でドキュメント マッチを行います_id

于 2012-09-24T15:12:25.187 に答える