我有一个myCollection集合,其中包含成员数组和位数:
{
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,但这个结果返回MongoDB中,而不是在猫鼬,我怎样才能在猫鼬的结果?谢谢。
猫鼬版本:^ 5.9.4“
myCollection.aggregate([
{
$project: {
nbMembers: {
$size: {
$filter: {
input: "$members",
as: "member",
cond: { $eq: ["$$member.status", 1] },
},
},
},
nbPlaces: 1,
},
},
{
$addFields: {
charged: {
$cond: {
if: { $eq: [{ $subtract: ["$nbPlaces", "$nbMembers"] }, 0] },
then: true,
else: false,
},
},
},
},
{ $match: { _id: ObjectId("5e83791eb49ab07a48e0282b"), charged: false } },
]);
我可以用猫鼬得到这样的结果:
const mongoose = require("mongoose");
const ObjectId = mongoose.Types.ObjectId;
router.get("/test", async (req, res) => {
const result = await myCollection.aggregate([
{
$project: {
nbMembers: {
$size: {
$filter: {
input: "$members",
as: "member",
cond: { $eq: ["$$member.status", 1] },
},
},
},
nbPlaces: 1,
},
},
{
$addFields: {
charged: {
$cond: {
if: { $eq: [{ $subtract: ["$nbPlaces", "$nbMembers"] }, 0] },
then: true,
else: false,
},
},
},
},
{ $match: { _id: ObjectId("5e83791eb49ab07a48e0282b"), charged: false } },
]);
res.send(result);
});
得到以下结果:
[
{
"_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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句