Este es mi esquema:
var ActivityLog = new Schema({ activity_at: { type: Date, default: Date.now }, activity_by: { type: Schema.Types.ObjectId, ref:"User" }, team_id: { type: Schema.Types.ObjectId, ref:"Team" }, activity_type: String, activity_value: String, msg: Object, });Llenar el campo activity_by
ActivityLog.find({}).limit(200).populate('activity_by') .then(activities => { res.json({success:true,activities:activities}) })RESULTADO
{ "_id": "616c6bace259ac5eafe333eb", "activity_at": "2021-10-17T18:30:04.929Z", "time": "2021-10-17T18:30:04.929Z", "activity_by": { "_id": "6107e5afce6a4a0b54be97b8", "profilePicUrl": "https://secure.gravatar.com/avatar/daed28df98c99bdaa640956e643bef3e.jpg?s=512&d=http2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png", "user_token": null, "name": "akshavanthm", "email": "akshavanthm@gmail.com", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFrc2hhdmFudGhtQGdtYWlsLmNvbSIsIm5hbWUiOiJha3NoYXZhbnRobSIsIl9pZCI6IjYxMDdlNWFlMDcyZDBmNDk3YmQ0MDhkZCIsImlhdCI6MTYyNzkwNzUwMn0.S7NeE-M523i2kGX7BZo-ztHvFoQ61bvvPnXZ0vbbnKM", "user_id": "6107e5ae072d0f497bd408dd", "team_id": "T029FKKGT55", "user_name": "akshavanthm", "timezone": "Asia/Kolkata", "user_slack_id": "U029TAAREF7", "displayName": "", "__v": 0, "welcomeSent": true }, "team_id": "612ddaa24846e87e0eda9ab6", "activity_type": "highChart_reports", "activity_value": "successfully sent High Chart report custom_report_2", "msg": null, "__v": 0 }No puedo encontrar la consulta para hacer coincidir el ID de usuario presente dentro de la actividad_por cuando uso:
ActivityLog.find({"activity_by.user_id":'6107e5ae072d0f497bd408dd'}).limit(200).populate('activity_by') .then(activities => { res.json({success:true,activities:activities}) })devuelve nulo. Cómo acceder al user_id dentro de la actividad_por (que está poblada). Solo puedo acceder al "_id" de la "actividad_por" y no a los otros campos
refiriéndose a esta respuesta en github, esto no es posible usando populate . sin embargo, puede usar aggregating con $lookup así:
ActivityLog.aggregate([ { $lookup: { from:"User", localField: "activity_by", foreignField: "_id", as: "yourDesiredFiledName" } } ])