0

我有收藏

[{ 
    "_id" : "5c9a69ef42c82b0197a2ffb8", 
    "key" : "a",  
    "language" : "en", 
    "version" : "0.1", 
},
{ 
    "_id" : "5c9a69ef42c82b0197a2ffb8", 
    "key" : "b",  
    "language" : "en", 
    "version" : "0.1", 
},
{ 
    "_id" : "5c9a69ef42c82b0197a2ffb8", 
    "key" : "b",  
    "language" : "en", 
    "version" : "0.2", 
},
{ 
    "_id" : "5c9a69ef42c82b0197a2ffb8", 
    "key" : "c",  
    "language" : "en", 
    "version" : "0.2", 
}]

所以我有 2 个查询获得 0.1 版和 0.2 版,我需要找出它们之间的区别吗?

我需要获取翻译 0.1 中不存在的所有翻译 0.2。

4

1 回答 1

1

这是获取所有key具有 0.2 版本但不是 0.1 版本的翻译的解决方案。

  • 首先我$sort按版本翻译。
  • 然后$group,我得到了给定的所有版本key
  • $match删除所有版本为 0.1 的密钥
  • $replaceRoot只保留最后一个版本key
db.collection.aggregate([
  {
    "$sort": {
      "version": 1
    }
  },
  {
    $group: {
      "_id": "$key",
      "items": {
        "$push": "$$ROOT"
      }
    }
  },
  {
    "$match": {
      "items.version": {
        "$ne": "0.1"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$last": "$items"
      }
    }
  }
])

在这里试试


如果删除$match,您还可以检索每个翻译可用的最后一个版本。

  • 键 a => 0.1 版
  • 键 b => 版本 0.2
  • 关键 c => 版本 0.2
db.collection.aggregate([
  {
    "$sort": {
      "version": 1
    }
  },
  {
    "$group": {
      "_id": "$key",
      "items": {
        "$push": "$$ROOT"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$last": "$items"
      }
    }
  }
])

在这里试试

于 2022-03-03T09:30:41.080 回答