2017-01-25 18 views
-1

私はケトルと一緒に作業しており、いくつかの期待値を持つエントリの数を計算する必要があります(少なくとも2つのフィールドが内側の配列にあります)。例えば

{ 
    "_id":"HY1406", 
    "accounts": [ 
     { 
      "should_exist" : 1, 
      "endpoint" : "0_AD", 
      "exists" : 0, 
      "short_login" : "TB6" 
     }, 
     { 
      "should_exist" : 1, 
      "endpoint" : "0_AD", 
      "exists" : 0, 
      "short_login" : "TB7" 
     }, 
     { 
      "should_exist" : 1, 
      "endpoint" : "0_AD", 
      "exists" : 0, 
      "short_login" : "TB8" 
     } 
    ] 
} 

私はアカウントが"sould_exist" = 1 AND "exists" = 0を有する少なくともを持っているどのように多くの文書を計算しなければなりません。

MongoDBクエリでこれを実行するにはどうすればよいですか?

+0

期待される結果が何であるかを使用してフィルタを書くのか? – styvane

+0

私たちに、あなたがすでに試したコードを見せてください。 –

+2

db.collection.find({"accounts.should_exist":1、 "accounts.exists":0})count() – mmu36478

答えて

0

$elemMatchを使用して、配列内の埋め込みドキュメントの条件を一致させる必要があります。 find()でカーソルを取得し、count()を呼び出します。

db.collection.find({ 
    accounts : { 
     $elemMatch : {should_exist : 1, exists : 0} 
    } 
}).count() 

またはcount()

db.collection.count({ 
    accounts : { 
     $elemMatch : {should_exist : 1, exists : 0} 
    } 
}) 

内部や凝集

db.collection.aggregate([ 
{ 
    $match : { 
     accounts : { 
      $elemMatch : {should_exist : 1, exists : 0} 
     } 
    } 
}, 
{ 
    $group : { 
     _id : "foo", 
     count : {$sum : 1} 
    } 
} 
]) 
+0

面白そうです実際には、カテゴリ1: "sould_exist" = 1 AND "exists" = 0、カテゴリ2: "sould_exist" = 1 AND "exists" = 1という結果を得ます:{"_id ":1.0、" numCat1 ":2、" numCat2 ":7}どうすればこのようなクエリを実行できますか? – sifokl

+0

これは質問に投稿した内容とはまったく異なります。 *少なくとも "sould_exist" = 1かつ "exists" = 0のアカウントを持つ文書の数を計算する必要があります。 – ares