gpt4 book ai didi

node.js - mongodb 内循环在同一个集合上

转载 作者:行者123 更新时间:2023-12-04 08:10:46 24 4
gpt4 key购买 nike

我正在寻找一个查询来查找低于特定日期的文档,并且还会为我提供具有等于该 ID 的 ref 键的行
对于以下数据(1 个集合),日期参数为“01-10-2019”(2019 年 10 月):(因此将仅首先搜索
lte : 01-10-2020

   {
{
"id": 1,
"ref": null,
"date": "20-09-2020" (SEP 20)
},
{
"id": 2,
"ref": 1,
"date": "today"
},
{
"id": 3,
"ref" null,
"date": "today"

}
}
结果将是: id 1 and 2 , 因为 1符合日期条件和 ID 2具有等于​​ id 1 的引用键.
id 3不会收到,因为它不符合日期标准
   {
{
"id": 1,
"ref": 2,
"date": "one month before"
},
{
"id": 2,
"ref": 1,
"date": "today"
},

}
问题是我需要处理超过 100-200k 行,并且每次都需要处理 1000 个文档
我怎样才能以有效的方式做到这一点?
我想过这样的事情:
1-
 col.find({date:{$lte:given_Date}}
2- 对每个结果运行并找到
 col.findOne({ref:given_id}}

最佳答案

你可以使用 aggregation framework

db.collection.aggregate([
{
"$addFields": {//Add a field to convert your dates
"date1": {
"$cond": {
"if": {
"$eq": [
"$date",
"today"
]
},
"then": new Date(),
"else": {
"$toDate": "$date"
}
}
}
}
},
{
"$lookup": {//Join
"from": "collection",
"localField": "id",
"foreignField": "ref",
"as": "output"
}
},
{
"$match": {//match condition
"date1": {
"$lte": ISODate("2020-10-01T00:00:00Z")
}
}
}
])
  • 存储比字符串格式正确的日期
  • 不要在今天之前找到当前日期 - 当一天过去时,您如何更改它!
  • 如果以上两条建议被采纳,你就可以避免$addFields .

  • playground

    关于node.js - mongodb 内循环在同一个集合上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65976699/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com