Если условие, если поле $ существует внутри $ group в монго - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть коллекция монго, в которой мне нужно сгруппировать данные по payment_id, далее мне нужно получить сумму total_payable.total_payable amount сделан из total_payable+extra_book_price.Нормальное дополнение работает, но я хочу нацелиться на сценарий, в котором extra_book_price, который находится внутри массива сведений, пуст.До сих пор я пытался $exists и ifNull, но они не работают.

Любая помощь приветствуется.

Также, если extra_book_price не существует, мне нужно вернуть *Только 1012 *.

[
  '$match'=>[
			  'bookfair_id'=>110
			]
],
[
  '$group'=> [
		       '_id'=>'$payment_id',
			   'card_pay'=> ['$sum'=> '$total_payable' ],
			   'count'=>[
					 '$sum'=>[
							'$cond'=> [ 
						            'if'=> ['$ifNull'=>['$extra_books_detail',true]], 
						            'then'=>['$total_payable'],
						            'else'=>['$add'=> ['$total_payable','$extra_books_detail.total_payable'] ]
					       ]
					     ]
				] 
				    ]
				],

DUMMY DATA

{  
   "_id":23761,
   "gross_total":2499,
   "total_payable":2499,
   "bookfair_id":110,
   "payment_id":2,
   "order_detail":[  
      {  
         "product_id":"5c63d418ae1db123d8048276",
         "amount":2499,
         "quantity":1,
         "status":1
      }
   ],
   "extra_books_detail":{  
      "employee_id":0,
      "total_payable":"100",
      "payment_id":1,
      "detail":[  
         {  
            "amount":"100",
            "quantity":1
         }
      ]
   },
   "status":1
}

AND IF EXTRA BOOK DETAIL пусто

{  
   "_id":1,
   "gross_total":350,
   "total_payable":350,
   "bookfair_id":300,
   "payment_id":1,
   "order_detail":[  
      {  
         "product_id":"5c4f2a5725956b7e8e7ddba8",
         "condition_id":"5c5562df25956b10c02d06d3",
         "amount":350,
         "quantity":1,
         "status":1
      }
   ],
   "extra_books_detail":[  

   ],
   "status":1,
   "date_added":"2018-01-06T06:14:04.000Z"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...