2017-10-23 24 views
0

に一致すると、基本的には、フィールド "focusStores"に特定のストアが含まれている場合にtrueのクエリでブール値フィールド "focus"を作成しようとしています。Mongo 3.2 Boolean配列

例:次のような製品は - ["AAA"、 "BBB"]を格納し、店舗 "AAA"を検索条件として使用している場合、フォーカスフィールドは真でなければなりません。

これは現在、私の最善の試みです。どんな助けもありがとう! MongoDBの3.2使用$setIsSubsetについては

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : {$focusStores: {$in : 'AAA'}} 
     } 
     } 
    ]) 
+0

$ condを使用できます。 – PVH

答えて

1

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : { $setIsSubset: [ ["AAA"], { "$ifNull": [ "$focusStores", [] } ] } 
     } 
     } 
    ]) 

おそらく、MongoDBの3.4オペレータである$inを読んで、間違った構文を得ました。 :

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : { $in: [ "AAA", { "$ifNull": [ "$focusStores", [] ] } ] } 
     } 
     } 
    ]) 

ただし、コースのサポートバージョンがある場合のみ。

いずれの場合も、不足しているプロパティを受け取るために$ifNullとラップします。

+0

$ setIsSubset "と$ setIsSubsetの両方のオペランドを試してみましたが、このエラーが発生しました。この問題を解決するには、$ setIsSubset"第2引数の型は:EOO " – MMrj

+0

@MMrjあなたの質問はfocusStoresが' ["AAA"、 "BBB"] 'の配列であるとは言いませんか?なぜなら、配列でなければ、そのプロパティは '[]'でラップする必要があるからです。どちらも配列でなければ、 '$ eq'だけが必要です。しかし、私はあなたが質問しているように質問されているので、配列であるかのようにあなたの質問を読んでいます。 –

+0

はい、フィールドは配列でなければなりませんが、ヌルが問題の可能性があります。 – MMrj

関連する問題