/*first Table*/
DBCollection coll = db.getCollection("orgmembers");
/*second table*/
DBObject lookupFields = new BasicDBObject("from", "orgcenters");
lookupFields.put("localField", "mappings.centerId");
lookupFields.put("foreignField", "_id");
lookupFields.put("as", "collegeDetails");
DBObject lookup = new BasicDBObject("$lookup", lookupFields);
schéma des orgcenters
{"_id" : ObjectId("5496d0a50cf2abd6b103b1a2"), "code" : "CEN-DVG", "name" : "Davangere"}
schéma membre
{ "dob" : "1989-01-13",
"firstName" : "Sandeep",
"mappings" : [ { "programId" : "5496d0cd0cf2abd6b103b1a6", "centerId" : "5496d0a50cf2abd6b103b1a2"}]
}
La recherche dans MongoDB ne se compare pas avec foriegn key _id
Réponses:
1 pour la réponse № 1Si votre champ local est un tableau, vous devez ajouter une étape $ dérouler à votre pipeline. Voir l'exemple sur cette page. S'il te plait regarde $ lookup
Dans orgmember schema
nous avons des mappages sous forme de tableau et il doit donc être déroulé avant l'exécution de la recherche $.
Cette requête fonctionnera si nous avons les deux id "s as string
Remarque: modifiez les deux ids en String.
db.orgmember.aggregate([
{
$unwind : "$mappings"
},
{
$lookup:
{
from: "orgcenters",
localField: "mappings.centerId",
foreignField: "_id",
as: "collegeFields"
}
}])
Dans votre requête, vous avez manqué l'option $ undind, c'est pourquoi vous n'obtenez pas le résultat.
J'espère que ça aide!