2
我有一個函數,它應該返回在給定的時間段內創建的用戶數,並且按邀請和未邀請的組來創建組。在$cond
運營商,我需要比較,如果字段tkbSponsor
不是null
並不等於[email protected]
。如果這個條件結果爲真,那麼該用戶被邀請。否則,他沒有被邀請。
var countByPeriod = function(req,res) {
var initialDate = req.body.initialDate;
var finalDate = req.body.finalDate;
User.aggregate([
{
"$match": {
"timeStamp": {
"$gte": new Date(initialDate),
"$lt": new Date(finalDate)
}
}
},
{
"$group": {
"_id": null,
"total": { "$sum": 1 },
"invited": {
"$sum": {
"$cond": [
{
"tkbSponsor": {
"$nin": ["[email protected]",null]
}
},
1,
0
]
}
}
}
}
], (err,result) => {
if (!err) {
if (result.length) res.send(result[0]);
else res.send({"total": 0,"invited":0});
} else {
res.sendStatus(500);
console.log(err);
}
});
};
順便說一句,在執行時該功能是給我的錯誤:
{ [MongoError: invalid operator '$nin']
name: 'MongoError',
message: 'invalid operator \'$nin\'',
ok: 0,
errmsg: 'invalid operator \'$nin\'',
code: 15999 }
只是一個觀察。我以前用的是$cond
操作如下,因爲我沒有必要跟null
比較:
"$cond": [
{
"$ne": ["$tkbSponsor", "[email protected]"]
},
1,
0
]
和它的作品。但是,現在我還要比較tkbSponsor
是否爲空並且使用$nin
,是否給我這個錯誤。
與''''null'''equals用'''存在'''運算符進行比較?該查詢正在運行,但結果不正確。我猜想與'''null'''的比較總是正確的。 – Chittolina
你可以編輯你的問題給一些樣本文件進行測試,並顯示你期望來自該樣本的正確結果嗎? – chridam