我正在嘗試使用 MongoDB 進行一些測驗,并且我已經找到了一些更簡單的 MySQL 查詢 MongoDB。現在,我有這個稍微復雜的查詢。
我有這個查詢,它告訴我在某個時間段內是否有來自確定用戶的訊息:
SELECT CASE WHEN count(1) = 0 THEN false ELSE true END AS 'value'
FROM messages m
WHERE m.time BETWEEN 0 AND 1652471890 AND m.user_id = '256f5280-fb49-4ad6-b7f5-65c4329d46e0';
目前我正在嘗試這樣做來計算數量并發出自定義值 0/1:
當前的 MongoDB 聚合
db.messages.aggregate([
{ $match:
{
$and: [
{user_id: "256f5280-fb49-4ad6-b7f5-65c4329d46e0"},
{time: {$gt: 1622471890, $lt: 1822471890}}
]
}
},
{ $count: "value"}
])
資料集:
[
{
"time": 1422471890,
"user_id": "256f5280-fb49-4ad6-b7f5-65c4329d46e0",
"message": "This is an example of my db"
},
{
"time": 1622471890,
"user_id": "256f5280-fb49-4ad6-b7f5-65c4329d46e0",
"message": "This is an example of my db (1)"
},
{
"time": 1622471890,
"user_id": "256f5280-fb49-4ad6-b7f5-65c4329d46e0",
"message": "This is an example of my db (2)"
},
{
"time": 1622471890,
"user_id": "e194d667-d79f-4262-94b1-ecf4561c9418",
"message": "This is an example of my db (3)"
},
{
"time": 1922471890,
"user_id": "256f5280-fb49-4ad6-b7f5-65c4329d46e0"<
"message": "This is an example of my db (4)"
}
]
回傳:
使用此資料集,它會回傳:
{ "value" : 2 }
我正在努力讓它回歸:
如果計數 > 0:
{ "value": 1 }
如果計數 <= 0:
{ "value": 0 }
uj5u.com熱心網友回復:
你只需要一個$addFields階段來申請$cond你的value
db.collection.aggregate([
{
$match: {
$and: [
{
user_id: "256f5280-fb49-4ad6-b7f5-65c4329d46e0"
},
{
time: {
$gte: 1622471890,
$lt: 1822471890
}
}
]
}
},
{
"$count": "value"
},
{
"$addFields": {
"value": {
"$cond": {
"if": {
"$gt": [
"$value",
0
]
},
"then": "$value",
"else": 0
}
}
}
},
{
"$unionWith": {
"coll": "collection",
"pipeline": [
{
$limit: 1
}
]
}
},
{
"$sort": {
value: -1
}
},
{
$limit: 1
},
{
"$project": {
_id: 0,
value: {
"$ifNull": [
"$value",
0
]
}
}
}
])
這是Mongo Playground供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476295.html
上一篇:在PrestoSQL的where子句中使用Max()
下一篇:使用Presto決議JSON列
