Comment MongoDB agrégation Node.js
var mongoose = require('mongoose');
var membersModel = require('./model_member.js');
exports.request_friend_list = function(req, res){
var userid=req.body.userid;
console.log(userid);
// membersModel.find({_id: userid,friends:{status:0}},{_id:0,'friends':1,},function(err,data)
membersModel.aggregate(
{$match: {_id:userid}},
{$project: {friends: 1}},
{$unwind: "$friends"},
{$match: {"friends.status": 0}}
,function(err,data){
if(err){
res.json({status:"error"});
throw err;
}else{
if(JSON.stringify(data).length > 0){
console.log(JSON.stringify(data));
res.json(data);
}
else{
res.json({status: "Data is not Exist."});
console.log("Data is not Exist.");
}
}
});
membersModel.find({...})
fonctionne normalement, mais memberModel.Aggregation({...})
ne fonctionne pas. Cela fonctionne aussi dans MongoDB:
db.members.aggregate({$match:_id: ObjectId("532b4729592f81596d000001"),$project:"friends":1,$unwind:"$friends",$match:"friends.status": 0})
Quel est le problème?
Vous devez vous connecter pour publier un commentaire.
Probablement le problème ici est que votre
userid
valeur n'est pas réellement une bonneObjectID
type quand il est passé dans le pipeline. Il en résulte en rien d'être "compensés" dans la phase initiale.Donc comme un exemple plus complet:
Qui sera ensuite correspondre les données comme prévu:
Donc, assurez-vous que cela est du type correct. La méthode des agrégats n'est pas automatiquement automatiquement une chaîne de valeur tels que "537ec520e98bcb378e811d54" dans un
ObjectID
type quand il est mentionné dans une étape du pipeline contre_id
dans la façon dont la Mangouste le fait avec d'autres de trouver et de méthodes de mise à jour.