Quiero obtener todos los detalles de un registro en particular por colección de ID de referencia.
{ "_id" : ObjectId("586c8bf63ef8480af89e94ca"), "createdDate" : ISODate("2017-01-04T05:45:26.945Z"), "branch" : { "$ref" : "branchmst", "$id" : "5864ac80fa769f09a4881791", "$db" : "eviral" }, "__v" : 0 }Este es mi registro de colección. Necesito todos los detalles de la colección "branchmst" donde "_id" es "5864ac80fa769f09a4881791".
Su colección es un ejemplo del uso de referencias manuales, es decir, incluir el campo _id de un documento en otro documento DBref . Mongoose puede entonces emitir una segunda consulta para resolver los campos a los que se hace referencia según sea necesario.
La segunda consulta sería usar el método agregado que tiene el operador $lookup que realizará una unión externa izquierda a la colección "branchmst" en la misma base de datos para filtrar documentos de la colección "unida" para su procesamiento:
MyModel.aggregate([ { "$match": { "branch": "5864ac80fa769f09a4881791" } }, { "$lookup": { "from": "branchmst", "localField": "branch", "foreignField": "_id", "as": "branchmst" } }, { "$unwind": "$branchmst" } ]) También puede usar la función populate() en Mongoose dado que ha definido explícitamente las referencias en la definición de su modelo, es decir
var mongoose = require('mongoose'); var ObjectId = mongoose.Schema.Types.ObjectId; // define the main schema var mySchema = mongoose.Schema({ createdDate: { type: Date, default: Date.now }, branch: { type: ObjectId, ref: 'Branch' } }) // define the branch schema var branchSchema = mongoose.Schema({ name: String, address: String }) // compile the models var MyModel = mongoose.model('MyModel', mySchema), Branch = mongoose.model('Branch', branchSchema); // populate query MyModel.find({ "branch": "5864ac80fa769f09a4881791" }) .populate('branch') .exec(function (err, docs) { //console.log(docs[0].branch.name); console.log(docs); });siempre que haya guardado su branch.$id como tipo Schema Object.
yourRecord.find({}).populate(branch.$id).exec(function(err, data){ console.log(data) })