2017-10-04 13 views
0

これは、指定された名前(この場合は「Clinique Toto」)のキャビネットからSecretaireのAプロを取得し、ここで苦労しています。2集の集約問題

キャブモデル:

var cabinet = new cabModel({ 
_id: new mongoose.Types.ObjectId(), 
InfoCab:{Nom: "Clinique Toto"} //This is the Name of the Cabinet 
}); 

cabinet.save((err, cabinet) => { 

Proのモデル案を設定

var pro1 = new proModel({ 
    _id: new mongoose.Types.ObjectId(), 
    Nom: 'ProTITI', 
    Cv:{ Fonction: { Secretaire: false}} 
}); 

pro1.Cabinets.push(cabinet._id); 
pro1.save((err, cabinet) => { }); 

var pro2 = new proModel({ 
    _id: new mongoose.Types.ObjectId(), 
    Nom: 'Pro_TOT', 
    Cv:{ Fonction: { Secretaire: true}} 
}); 

:長所のいくつかのために真。キャブに作成した専門家を押す

pro2.Cabinets.push(cabinet._id); 
pro2.save((err, cabinet) => { }); 

var pro3 = new proModel({ 
    _id: new mongoose.Types.ObjectId(), 
    Nom: 'Josianne', 
    Cv:{ Fonction: { Secretaire: true}} 
}); 
pro3.Cabinets.push(cabinet._id); 
pro3.save((err, cabinet) => { }); 

cabinet.Pro.push(pro1, pro2, pro3); 
cabinet.save(); 

console.log("Done"); 
}); 

const handleError = function (err) { 
console.error(err); 
}; 

私はこれまでに得た: プロスキーマ:

const ProSchema = new Schema({ 
_id: { type: Schema.Types.ObjectId }, 
Cv: {Fonction: {Pro: {type: Boolean,}, 
       Secretaire: {type: Boolean} 
    } 
} 

CabSchema:

ここ

db.Pro.aggregate([ 
{ 
    $match: { 
     Cv: { 
      Fonction: { 
       Secretaire: true 
      } 
     } 
    } 
}, 
{ 
    $lookup: 
    { 
     from: "Cab", 
     localField:"Nom", 
     foreignField: "_id", 
      as: "PK" 
    } 
} 
]) 
はスキーマです
const CabSchema = new Schema({ 
Pro: [{ type: Schema.Types.ObjectId, ref: 'ProSchema' }], 
InfoCab: { 
     Nom: {type: String} 
}); 

答えて

0

モデルにスキーマを追加して、質問がより明確になるようにすることはできますか?与えられた情報から

、それはノムが文字列であるように、見えすなわちNom: 'Josianne'と次のように検索を使用している:

$lookup: 
{ 
    from: "Cab", 
    localField:"Nom", 
    foreignField: "_id", 
    as: "PK" 
} 
  1. 今の問題は_idあるハッシュである、タイプObjectId()であります文字列が一意に生成されます。ここで、Nomはあなたが作成した文字列です。論理的には一致しません。
  2. iF CabコレクションはcabModelと同じですが、foreignFieldはInfoCab.Nomである必要があります。すなわちforeignField: "InfoCab.Nom",

=== UPDATEあなたは罠を検討するかもしれないの観測===

カップル:

  1. あなたは、次のようアグリゲーションを使用する必要があります:あなたはすでに使用している場合はproModel.aggregate([...])
  2. をマングーススキーマのrefには、.populate()メソッドを使用できます。
+0

私はスキーマで編集したところです。 乾杯、 – NelieluTu

+0

#2を試しましたか? – imixtron

+0

これは、infocabの出力です。"キャビネット":[ObjectId( "59d4b229585ee41a309ade4e"):キャビネット "、"キャビネット "、"キャビネット " ) "、" __v ":0、" PK ":[]} {" _id ":ObjectID(" 59d4b229585ee41a309ade50 ")、" Nom ":" Pro_TOT "、" Cv ":{" Fonction ":{" Secretaire " :true}}、キャビネット:[ObjectId( "59d4b229585ee41a309ade4e")]、 "__v":0、 "PK":[]} ここのことは、タクシーの名前をフィルターとしても持たせたいと思います。 乾杯、 – NelieluTu