/ / Lookup dans MongoDB ne se compare pas avec foriegn key _id - java, mongodb

La recherche dans MongoDB ne se compare pas avec foriegn key _id - java, mongodb

/*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 № 1

Si 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!