【发布时间】:2019-01-12 02:40:51
【问题描述】:
我想知道一场演出订了多少座位。
每个演出文档中都有一个“showTakenSeats”对象。
这里是初始数据:
[
{
"_id": "5b658d37692f2e3c881960cb",
"_MovieId": "5b5835dd86ab401494263861",
"_TheaterId": "5b3dfeb217bc8c23f0e7ec3f",
"dateTime": "2018-08-04T14:00:00.000Z",
"showTakenSeats": {
"0-0": "5b658f79dd8bb938289e2e0b",
"0-1": "5b658f79dd8bb938289e2e0b",
"0-2": "5b658f79dd8bb938289e2e0b"
},
"__v": 0,
},
{
"_id": "5b658d4a692f2e3c881960cc",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b45d269a53b0c05f8959260",
"dateTime": "2018-08-04T13:00:00.000Z",
"showTakenSeats": {
"0-0": "5b65904bdd8bb938289e2e0d",
"0-1": "5b65904bdd8bb938289e2e0d",
"0-2": "5b65904bdd8bb938289e2e0d"
},
"__v": 0,
},
{
"_id": "5b658fd1dd8bb938289e2e0c",
"_MovieId": "5b575452478afb72ec65f8f6",
"_TheaterId": "5b45d219a53b0c05f895925f",
"dateTime": "2018-08-04T20:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
},
{
"_id": "5b6593d80d48d9394877dd09",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b446a8768db4e2e980723ab",
"dateTime": "2018-08-05T10:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
},
{
"_id": "5b65943b0d48d9394877dd0a",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b446a8768db4e2e980723ab",
"dateTime": "2018-08-03T22:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
}
]
这是我的代码:
Show.aggregate([
{
$addFields: {'count':Object.keys('$showTakenSeats').length}
}
], function (err, result) {
if (err) {
//next(err);
return res.json(err);
} else {
res.json(result);
}
});
结果如下:
[
{
"_id": "5b658d37692f2e3c881960cb",
"_MovieId": "5b5835dd86ab401494263861",
"_TheaterId": "5b3dfeb217bc8c23f0e7ec3f",
"dateTime": "2018-08-04T14:00:00.000Z",
"showTakenSeats": {
"0-0": "5b658f79dd8bb938289e2e0b",
"0-1": "5b658f79dd8bb938289e2e0b",
"0-2": "5b658f79dd8bb938289e2e0b"
},
"__v": 0,
"count": 15
},
{
"_id": "5b658d4a692f2e3c881960cc",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b45d269a53b0c05f8959260",
"dateTime": "2018-08-04T13:00:00.000Z",
"showTakenSeats": {
"0-0": "5b65904bdd8bb938289e2e0d",
"0-1": "5b65904bdd8bb938289e2e0d",
"0-2": "5b65904bdd8bb938289e2e0d"
},
"__v": 0,
"count": 15
},
{
"_id": "5b658fd1dd8bb938289e2e0c",
"_MovieId": "5b575452478afb72ec65f8f6",
"_TheaterId": "5b45d219a53b0c05f895925f",
"dateTime": "2018-08-04T20:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
"count": 15
},
{
"_id": "5b6593d80d48d9394877dd09",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b446a8768db4e2e980723ab",
"dateTime": "2018-08-05T10:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
"count": 15
},
{
"_id": "5b65943b0d48d9394877dd0a",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b446a8768db4e2e980723ab",
"dateTime": "2018-08-03T22:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
"count": 15
}
]
count 的结果是不正确的。 'Object.keys('$showTakenSeats').length' 似乎一直返回 15。而不是应该不同的实际值。
count的结果应该是(3,3,0,0,0)
有人知道是什么问题吗? 谢谢!
【问题讨论】:
-
你得到了字符串“$showTakenSeats”的长度。
-
@Pointy 你是对的!知道如何获得所需的值吗?
-
好吧,恐怕我对您使用的框架不熟悉。
标签: javascript node.js mongodb mongoose aggregation-framework