Javascript 如何根据mongodb中的值计算数组中的文档数?
我需要计算停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在excluded属性中具有假值,我如何装载查询 到目前为止,我已经能够使用excluded:false属性选择停车位的数量。但是我们正在从所有停车场中进行选择 请注意,有两个文档表示停车场,其中每个文档都有一个数组,称为parkingSpaces,用于记录停车场文档 第一个文档有两个未排除的空缺,因此排除了属性:false,第二个文档只有一个空缺,也没有排除Javascript 如何根据mongodb中的值计算数组中的文档数?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我需要计算停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在excluded属性中具有假值,我如何装载查询 到目前为止,我已经能够使用excluded:false属性选择停车位的数量。但是我们正在从所有停车场中进行选择 请注意,有两个文档表示停车场,其中每个文档都有一个数组,称为parkingSpaces,用于记录停车场文档 第一个文档有两个未排除的空缺,因此排除了属性:false,第二个文档只有一个空缺,也没有排除 { "_id": "5d752c544
{
"_id": "5d752c544f4f1c0f1c93eb23",
"name": "estacionamento um",
"parkingSpace": [
{
"_id": "5d752cf54f4f1c0f1c93eb26",
"name": "vg001",
"excluded": true
},
{
"_id": "5d752cf54f4f1c0f1c93eb27",
"name": "vg001",
"excluded": false
},
{
"_id": "5d75339bc411423a9c14ac52",
"name": "vg002",
"excluded": false
}
]
},
{
"_id": "5d7706b60d354b72388a38f4",
"name": "estacionamento dois",
"parkingSpace": [
{
"_id": "5d77078a5173bb63bc87b7ca",
"name": "vg004",
"excluded": false
}
]
}
我需要添加停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在排除属性中的值为false
最后,我需要返回值2,参考_id:5d752c544f4f1c0f1c93eb23停车位,它在excluded属性中的值为false
到目前为止,通过下面的查询,我能够选择带有假值的排除属性的空缺,但它正在从所有停车场中进行选择
const registeredParkingSpaces = await Parking.aggregate([
{ $unwind: '$parkingSpace' },
{ $match: { 'parkingSpace.excluded': false } },
{
$group: {
_id: parking_id,
total: { $sum: 1 }
}
}
]);
返回:
{
"message": [
{
"_id": "5d752c544f4f1c0f1c93eb23",
"total": 3
}
]
}
但它需要回归:
{
"message": [
{
"_id": "5d752c544f4f1c0f1c93eb23",
"total": 2
}
]
}
这是一个查询,通过它您可以获得总停车次数 **更新**
db.collection.aggregate([
{
$match: {
"parkingSpace.excluded": false,
}
},
{
$project: {
parkingSpace: 1
}
},
{
"$group": {
"_id": "$_id",
"count": {
"$sum": {
"$size": {
"$filter": {
"input": "$parkingSpace",
"as": "el",
"cond": {
"$eq": [
"$$el.excluded",
false
]
}
}
}
}
}
}
}
])
您可以从此
有关$sum的更多信息:请访问官方网站
通过这个,你得到了你的解决方案 在聚合中,首先您与id匹配,然后进行下一步,您将获得您的愿望计数,因为此时您正在考虑整个文档“parkingSpace”。下面是示例代码,我想它会适合您
const ObjectId = require('mongoose').Types.ObjectId;
const registeredParkingSpaces = await Parking.aggregate([
{ $match: { _id: objectId(body.id) } }
{ $unwind: '$parkingSpace' },
{ $match: { 'parkingSpace.excluded': false } },
{
$group: {
_id: parking_id,
total: { $sum: 1 }
}
}
]);
事实上,他只需要返回一个,因为其中一个空缺的属性被排除在外:True,但由于我删除了多个作业,它会不断返回“1”。我需要使用排除在外的:false parking属性计算停车位,id为:“5d752c544f4f1c0f1c93eb23”。在本例中,文档有3个空缺,其中两个不包含属性:falseNow检查最终代码。这就是你想要的@劳尔格尔马诺在这里测试了一下,效果不错,谢谢。它对第一个和第二个id有效。我添加了更多的停车位,排除和不排除,并且有效:D