2017-02-14 17 views
0

複雑なmongoクエリを作成しようとしていて、数時間の試行錯誤の後にエラーが発生しました。配列内に1つ以上の項目があり、配列以外の項目がない項目を見つける

与える以下の文書は:

私は配列[ '砂糖'、 '水']を照会する場合は
{ 
    // Item 1 
    name: 'Tranças Nordestinas', 
    author: 'Daiane Rosa', 
    ingredients: [ 
     'wheatFlour', 
     'sugar', 
     'butter', 
     'bakingPowder', 
     'eggs' 
    ] 
} 

{ 
    // Item 2 
    name: 'Brigadeiro de Churros', 
    author: 'Cristine Russel', 
    ingredients: [ 
     'sugar', 
     'chocolate' 
    ] 
} 

{ 
    // Item 3 
    name: 'Chá Mate Gelado', 
    author: 'Victor Onofre', 
    ingredients: [ 
     'sugar', 
     'water' 
    ] 
} 

{ 
    // Item 4 
    name: 'Macarrão Verde ao Molho', 
    author: 'Victor Onofre', 
    ingredients: [ 
     'greenPasta', 
     'tomatoSauce', 
     'butter' 
    ] 
} 

、唯一の3番目の項目が返されshoud。

配列['water'、 'chocolate'、 'wheatFlour'、 'sugar'、 'butter'、 'bakingPowder'、 'eggs']をクエリすると、項目1、項目2、項目3が返されます。

そして配列['sugar']に問い合わせると、返される項目はありません。

この種のクエリを実行する方法が見つかりませんでした。 mongodbがこのクエリを実行するための適切な選択肢であるかどうかわかりません。この状況でmysqlがうまく機能するでしょうか?

ありがとうございました。

答えて

1

$setIsSubsetをお試しください。入力アレイと成分アレイを比較し、成分アレイがあまりにも等しく、$redact比較上記からの結果を使用する含み、入力配列のサブセットである場合trueを返す

$setSubsettrue値を保持し、false値を削除します。

db.collection.aggregate(
    [{ 
     $redact: { 
      $cond: { 
       if: { 
        $setIsSubset: ["$ingredients", ['sugar']] 
       }, 
       then: "$$KEEP", 
       else: "$$PRUNE" 
      } 
     } 
    }] 
); 
+0

魅力的な作品です。どうもありがとうございました! –

関連する問題