gpt4 book ai didi

node.js - 如何在 Node.js 中进行 MongoDB 聚合

转载 作者:可可西里 更新时间:2023-11-01 10:04:23 25 4
gpt4 key购买 nike

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({...}) 运行正常,但 memberModel.Aggregation({...}) 不工作。这也适用于 MongoDB:

db.members.aggregate({$match:_id: ObjectId("532b4729592f81596d000001"),$project:"friends":1,$unwind:"$friends",$match:"friends.status": 0})

问题是什么?

最佳答案

这里可能出现的问题是,当您的 userid 值被传递到管道时,它实际上不是正确的 ObjectID 类型。这导致在初始阶段没有任何东西被“匹配”。

因此作为一个更完整的例子:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectID = require("mongodb").ObjectID;

mongoose.connect("mongodb://localhost/test");

friendSchema = new Schema({
"name": String,
"status": Number
});

memberSchema = new Schema({
friends: [friendSchema]
});

var Member = mongoose.model("Members", memberSchema );

var userid = new ObjectID("537ec520e98bcb378e811d54");

console.log( userid );

Member.aggregate([
{ "$match": { "_id": userid } },
{ "$unwind": "$friends" },
{ "$match": { "friends.status": 0 } }],
function( err, data ) {

if ( err )
throw err;

console.log( JSON.stringify( data, undefined, 2 ) );

}
);

然后它将按预期匹配数据:

[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]

所以要小心确保这是正确的类型。聚合方法不会自动将字符串值(例如“537ec520e98bcb378e811d54”)包装到 ObjectID 类型中,当它在流水线阶段针对 _id 以 Mongoose 执行此操作的方式提及时与其他查找和更新方法。

关于node.js - 如何在 Node.js 中进行 MongoDB 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23805772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com