Как получить значение несопоставленных записей с агрегацией MongoDb - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в Mongo Db и был бы признателен за помощь в этом вопросе. Я написал агрегацию mongodb в одном поле «lampStatus»: «OFF» - это 30 записей, а «lampStatus»: «ON» - нет записей - есть я вышел положил {"OFF": 30} у меня нет значения {"ON": 0}, пожалуйста, кто-нибудь мне посоветует.

 db.collection.aggregate([
  { $match:{"type" : "L"}},
  { "$facet": {
    "ON": [
      { "$match" : {"lampStatus":'ON'}},
      { "$count": "ON" }
    ],
    "OFF": [
      { "$match" : {"lampStatus": 'OFF'}},
      { "$count": "OFF" }
    ]
  }},
  { "$project": {
    "ON": { "$arrayElemAt": ["$ON.ON", 0] },
    "OFF": { "$arrayElemAt": ["$OFF.OFF", 0] }
  }},

])

Выход: { «ВЫКЛ»: 30 }

expected ouput:{
  "OFF" : 30,
  "ON":0
 }

1 Ответ

0 голосов
/ 30 августа 2018

Вам необходимо использовать $ifNull со $project этапом, подобным этому

{ "$project": {
  "ON": { "$ifNull": [{ "$arrayElemAt": ["$ON.ON", 0] }, 0 ] },
  "OFF": { "$ifNull": [{ "$arrayElemAt": ["$OFF.OFF", 0] }, 0 ] }
}}

Вы получите

[{
  "OFF": 30,
  "ON": 0
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...