Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用$groupby并转换不同的值mongodb_Mongodb_Aggregation Framework_Conditional Statements - Fatal编程技术网

如何使用$groupby并转换不同的值mongodb

如何使用$groupby并转换不同的值mongodb,mongodb,aggregation-framework,conditional-statements,Mongodb,Aggregation Framework,Conditional Statements,如何使用$if$elsegroupby条件MongoDB转换数据 这个操场应该返回两个属于文本的对象,分别是“tester 2”和“tester 3”。如果我在历史记录集合中有多个对象,它还应该检查最后一个对象,而不是所有对象,这是怎么可能的 所以条件应该说,如果历史记录的日期是$gt,那么主集合应该不返回任何内容,而是返回匹配的条件数据 db.main.aggregate([ { $lookup: { from: "history", localField:

如何使用
$if$else
groupby条件MongoDB转换数据

这个操场应该返回两个属于文本的对象,分别是“tester 2”和“tester 3”。如果我在历史记录集合中有多个对象,它还应该检查最后一个对象,而不是所有对象,这是怎么可能的

所以条件应该说,如果历史记录的日期是
$gt
,那么主集合应该不返回任何内容,而是返回匹配的条件数据

db.main.aggregate([
  {
    $lookup: {
      from: "history",
      localField: "history_id",
      foreignField: "history_id",
      as: "History"
    }
  },
  {
    $unwind: "$History"
  },
  {
    "$match": {
      $expr: {
        $cond: {
          if: {
            $eq: [
              "5e4e74eb380054797d9db623",
              "$History.user_id"
            ]
          },
          then: {
            $and: [
              {
                $gt: [
                  "$date",
                  "$History.date"
                ]
              },
              {
                $eq: [
                  "5e4e74eb380054797d9db623",
                  "$History.user_id"
                ]
              }
            ]
          },
          else: {}
        }
      }
    }
  }
])

如果我理解正确,这就是你想要做的:

db.main.aggregate([
  {
    $lookup: {
      from: "history",
      let: {
        main_history_id: "$history_id",
        main_user_id: { $toString: "$sender_id" }
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$history_id",
                    "$$main_history_id"
                  ]
                },
                {
                  $eq: [
                    "$user_id",
                    "$$main_user_id"
                  ]
                }
              ]
            }
          }
        }
      ],
      as: "History"
    }
  },
  {
    $unwind: {
      path: "$History",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    $sort: {
      _id: 1,
      "History.history_id": 1,
      "History.date": 1
    }
  },
  {
    $group: {
      _id: "$_id",
      data: { $last: "$$ROOT" },
      History: { $last: "$History" }
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          "$data",
          { History: "$History" }
        ]
      }
    }
  },
  {
    "$match": {
      $expr: {
        $or: [
          {
            $eq: [
              { $type: "$History.date" },
              "missing"
            ]
          },
          {
            $ne: [
              "5e4e74eb380054797d9db623",
              "$History.user_id"
            ]
          },
          {
            $and: [
              {
                $eq: [
                  "5e4e74eb380054797d9db623",
                  "$History.user_id"
                ]
              },
              {
                $gte: [
                  "$date",
                  "$History.date"
                ]
              }
            ]
          }
        ]
      }
    }
  }
])

Hi@Valijon如果历史记录集合为空,则应返回所有主要集合详细信息,并仅返回_id,主集合中的日期和文本,但它应该返回所有数据谢谢您还需要一个帮助,如果用户id不匹配,请查看此信息也返回everything@SunilDubey检查这个@Vilijon你能帮我一个忙吗?我们不能根据主收藏的历史记录id和发件人id以及历史记录收藏的用户id和历史记录id设置查找,然后检查吗和日期相比?如果可能的话,请引导他们help@SunilDubey看一看