2017-06-21 9 views
1

サービスの種類に応じてビジネス文書をフィルタリングする必要があります。人口移動後のフィルタリング方法

var BusinessSchema = Schema({ 
    name: String, 
    slug: String, 
    service: [{type: Schema.ObjectId, ref: 'Service'}], 
    owner: {type: Schema.ObjectId, ref: 'User'} 

}); 

module.exports = mongoose.model('Business', BusinessSchema); 

とスキーマサービスです:ビジネスのこの配列の

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var ServiceSchema = Schema({ 
    name: String, 
}); 

module.exports = mongoose.model('Service', ServiceSchema); 

だけ例えばそのサービス「サービスA」の中に持っているものが必要になります。この場合

"business": [ 
     { 
      "_id": "594957df4e195d2500324726", 
      "owner": "59482e80d4df7208503154b8", 
      "slug": "Almacene2s", 
      "name": "Almacene2s", 
      "__v": 0, 
      "service": [ 
       { 
        "_id": "594ab160778ae82c44af3a78", 
        "name": "Service C", 
        "__v": 0 
       }, 
       { 
        "_id": "594ab1be778ae82c44af3a7a", 
        "name": "Service D", 
        "__v": 0 
       } 
      ], 

     }, 
     { 
      "_id": "5948483e6bcc1f2788b09145", 
      "owner": "59482e80d4df7208503154b8", 
      "slug": "guaranda-2", 
      "name": "Guaranda Fig", 

      "service": [ 
       { 
        "_id": "594ab160778ae82c44af3a78", 
        "name": "Service A", 
        "__v": 0 
       }, 
       { 
        "_id": "594ab1be778ae82c44af3a7a", 
        "name": "Service B", 
        "__v": 0 
       } 
      ], 

     } 
] 

私が取得したい結果は次のとおりです。

{ 
      "_id": "5948483e6bcc1f2788b09145", 
      "owner": "59482e80d4df7208503154b8", 
      "slug": "guaranda-2", 
      "name": "Guaranda Fig", 

      "service": [ 
       { 
        "_id": "594ab160778ae82c44af3a78", 
        "name": "Service A", 
        "__v": 0 
       }, 
       { 
        "_id": "594ab1be778ae82c44af3a7a", 
        "name": "Service B", 
        "__v": 0 
       } 
      ], 

     } 

私は、この検索を実行できるようにするためのシステムは、ユーザーがとして選択できるようになりますので、それは非常に重要です希望するサービスを持つビジネスをフィルタリングします。

これはnodejs + mongodbの私の最初のプロジェクトであり、私はあなたの助けが欲しいと思います。あなたは、このアグリゲーションパイプラインで

Service.aggregate([ 
    { 
     $match: { 
      "name": "Service A" 
     } 
    }, 
    { 
     $lookup: { 
      from: "business", 
      localField: "_id", 
      foreignField: "service", 
      as: "businesses" 
     } 
    } 
], function(err, result) { 
    console.log(result); 
}); 

最初の試合と名前「サービスA」とのサービス文書を検索:$lookupを使用して非常に

答えて

0

をありがとう、ここにあなたが達成できるものです。次に一致するもののserviceビジネス文書の配列を検索し、businessesフィールドに配置します。結果は次のようになります。

{ 
    "_id" : "594af96883ab76db8ecd021b", 
    "name" : "Service A", 
    "businesses" : [ 
     { 
      "_id" : "594af9a683ab76db8ecd0225", 
      "slug" : "Almacene2s", 
      "owner" : "59482e80d4df7208503154b8", 
      "name" : "Almacene2s", 
      "service" : [ 
       "594af96883ab76db8ecd021b", 
       "594af96883ab76db8ecd021d" 
      ] 
     } 
    ] 
} 
関連する問題