下面的代碼回傳了CollectionA中存在但不存在于CollectionB中的所有資料。(使用作為參考)。mainID
return this.aggregate([
{
$lookup: {
from: 'CollectionB',
localField: 'mainId',
foreignField: 'mainId',
as: 'validd',
},
},
{
$match: {
'validd.mainId': { $exists: false },
},
},
]);
但現在我需要添加另一個過濾器。我還需要獲取欄位大于 90 天的createdAt資料。
換句話說:壽命超過 90 天的記錄。
嘗試使用$gte和$lte內部$match 但沒有作業。
{
$match: {
'validd.createdAt': { $gte: moment.utc().add(-90, "days") },
},
},
這不回傳任何內容。
我的資料庫:
{
_id: 227dd33c5c51c79f63743da3
mainId: 5c306562-9c87-48dd-93ca-4a118be50490
createdAt: 2022-05-07T02:28:12.537 00:00
},
{
_id: f3ddd33c5c51c79f63743da3
mainId: 5c306562-9c87-48dd-93ca-4a118be50490
createdAt: 2022-05-10T02:28:12.537 00:00
},
{
_id: 227dd33c5c51c79f63743da3
mainId: 5c306562-9c87-48dd-93ca-4a118be50490
createdAt: 2022-01-01T02:28:12.537 00:00
}
我們可以忽略所有資料,只需要關注 oon createdAt。
我想保留$lookup邏輯,但還添加過濾器以僅回傳createdAt大于 90 天的行(考慮當天/今天)。
所以按照這個邏輯,應該只回傳最后一條記錄,因為所有其余的行都是在不到 90 天前創建的
編輯
澄清。如果出現以下情況,我需要回傳資料:
- collectionA 的行在 collectionB 中不存在
- collectionB 中存在 collectonA 的行但
createdAt大于 X 天。
根據@ray 的回答嘗試了這個
return this.aggregate([
{
$lookup: {
from: 'CollectionB',
localField: 'mainId',
foreignField: 'mainId',
as: 'validd',
},
},
{
$match: {
$expr: {
$or: [
{
$eq: ["$validd", []]
},
{
$and: [
{
$lt: [ "validd.createdAt", moment.utc().add(-interval, "days").format('YYYY-MM-DD') ]
},
{
$ne: ["validd", null]
}
]
}
]
}
},
},
]);
uj5u.com熱心網友回復:
您可以簡單地$or在$exprin 中使用$match
db.CollectionA.aggregate([
{
"$lookup": {
"from": "CollectionB",
"localField": "mainId",
"foreignField": "mainId",
"as": "validd"
}
},
{
"$match": {
$expr: {
$or: [
{
$eq: [
"$validd",
[]
]
},
{
$and: [
{
$ne: [
"$validd",
[]
]
},
{
$lt: [
"$createdAt",
{
"$dateSubtract": {
"startDate": "$$NOW",
"unit": "day",
"amount": 90
}
}
]
}
]
}
]
}
}
}
])
這是Mongo游樂場供您參考。
對于 MongoDB v5.0 之前的版本,您可以$subtract $$NOW90 天 * 24 小時 * 60 分鐘 * 60 秒 * 1000 毫秒 = 7776000000 并與減法結果進行比較作為替代。
db.CollectionA.aggregate([
{
"$lookup": {
"from": "CollectionB",
"localField": "mainId",
"foreignField": "mainId",
"as": "validd"
}
},
{
"$match": {
$expr: {
$or: [
{
$eq: [
"$validd",
[]
]
},
{
$and: [
{
$ne: [
"$validd",
[]
]
},
{
$lt: [
"$createdAt",
{
"$subtract": [
"$$NOW",
7776000000
]
}
]
}
]
}
]
}
}
}
])
這是Mongo游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476007.html
標籤:节点.js mongodb 猫鼬 mongodb查询 聚合框架
