Запрос условной проекции mongoDb - PullRequest
1 голос
/ 08 мая 2020

У меня есть данные, как показано ниже:

{MS: 'MS1', fileName: 'file1', RSCP: 75, EcNo: 10, ...}
{MS: 'MS2', fileName: 'file1', RSCP: 76, EcNo: 11, ...}
{MS: 'MS3', fileName: 'file1', RSCP: 77, EcNo: 12, ...}
{MS: 'MS4', fileName: 'file1', RSCP: 78, EcNo: 13, ...}

Мне нужно запросить такие данные:

find all documents that fileName = file1
if MS = MS1 return RSCP
if MS = MS2 return EcNo

как я могу запросить mon go таким образом в одном запросе?

1 Ответ

0 голосов
/ 08 мая 2020

Вы можете попробовать следующий запрос агрегирования:

db.collection.aggregate([
  /** filter docs with condition */
  {
    $match: {
      fileName: "file1"
    }
  },
  /** Re-create `EcNo` & `RSCP` fields based on conditions 
   * `$$REMOVE` completely removes the field
   */
  {
    $addFields: {
      EcNo: { $cond: [ { $eq: [ "$MS", "MS1" ] }, "$$REMOVE", "$EcNo" ] },
      RSCP: { $cond: [ { $eq: [ "$MS", "MS2" ] }, "$$REMOVE", "$RSCP" ] }
    }
  }
])

Тест: mongoplayground

...