Node.js 聚合查询在mongodb中运行,而不是在mongoose中运行
我有一个集合myCollection,包含成员数组和位置数:Node.js 聚合查询在mongodb中运行,而不是在mongoose中运行,node.js,mongodb,express,mongoose,aggregation-framework,Node.js,Mongodb,Express,Mongoose,Aggregation Framework,我有一个集合myCollection,包含成员数组和位置数: { name : String, members: [{status : Number, memberId : {type: Schema.Types.ObjectId, ref: 'members'}], nbPlaces : Number } 我有这些数据 "_id" : ObjectId("5e83791eb49ab07a48e0282b") "members" : [ {
{
name : String,
members: [{status : Number, memberId : {type: Schema.Types.ObjectId, ref: 'members'}],
nbPlaces : Number
}
我有这些数据
"_id" : ObjectId("5e83791eb49ab07a48e0282b")
"members" : [
{
"status" : 1,
"_id" : ObjectId("5e83791eb49ab07a48e0282c"),
"memberId" : ObjectId("5e7dbf5b257e6b18a62f2da9")
},
{
"status" : 2,
"_id" : ObjectId("5e837944b49ab07a48e0282d"),
"memberId" : ObjectId("5e7de2dbe027f43adf678db8")
}
],
"nbPlaces": 5
我对由$addFields添加的字段进行$match匹配,但返回的结果是mongoDb而不是mongoose,
如何在猫鼬中获得结果?多谢各位
猫鼬版本:^5.9.4“
我可以用猫鼬得到这样的结果:
const mongoose=require(“mongoose”);
const ObjectId=mongoose.Types.ObjectId;
路由器.get(“/test”),异步(请求,res)=>{
const result=await myCollection.aggregate([
{
$项目:{
国家统计局成员:{
$size:{
$filter:{
输入:“$members”,
作为:“成员”,
条件:{$eq:[“$$member.status”,1]},
},
},
},
地点:1,,
},
},
{
$addFields:{
收费:{
$cond:{
如果:{$eq:[{$subtract:[“$nbPlaces”,“$nbMembers”]},0]},
那么,对,,
否则:错,
},
},
},
},
{$match:{{u id:ObjectId(“5e83791eb49ab07a48e0282b”),收费:false},
]);
res.send(结果);
});
结果如下:
[
{
"_id": "5e83791eb49ab07a48e0282b",
"nbPlaces": 5,
"nbMembers": 1,
"charged": false
}
]
请检查您的myCollection架构是否与您的数据匹配,我使用了以下选项:
const mongoose = require("mongoose");
const schema = new mongoose.Schema({
name: String,
members: [
{
status: Number,
memberId: { type: mongoose.Schema.Types.ObjectId, ref: "members" },
},
],
nbPlaces: Number,
});
module.exports = mongoose.model("myCollection", schema);
您可以为成员添加成员架构代码和示例文档吗?上面的代码看起来并没有返回值或保存在任何变量中。感谢您的回答,它似乎是相同的架构和相同的查询,在删除myCollection中的所有数据后,它起作用了,@user2285831不客气,我想这回答了您的问题,p请考虑将其标记为答案。
const mongoose = require("mongoose");
const schema = new mongoose.Schema({
name: String,
members: [
{
status: Number,
memberId: { type: mongoose.Schema.Types.ObjectId, ref: "members" },
},
],
nbPlaces: Number,
});
module.exports = mongoose.model("myCollection", schema);