Mongodb сравнивает использование поля с другим полем в массиве объектов - PullRequest
1 голос
/ 05 мая 2020

У меня есть следующая структура для моей коллекции:

{  
   "price":123,  
   "totalPrices": [
      {
         "totPrice":123
      }
   ]  
}

Я пытаюсь запросить все документы в моей коллекции, где цена не равна totalPrice.totPrice (поэтому выше должно быть не ).

Но он также продолжает возвращать документы с одинаковыми ценами (например, образец выше).

Я использую этот запрос:

{   
    $where : "this.price!== this.totalPrices.totPrice",  
    totalPrice:{$size:1}  
}

Что я делаю не так: (

1 Ответ

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

Во-первых, вам нужно сопоставить размер массива totalPrices равен 1. Во-вторых, вам нужно раскрутить totalPrices, так как это поле массива. Наконец, вы должны соответствовать равенству price и totalPrices.totPrice. Попробуйте следующий код:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $eq: [
          {
            $size: "$totalPrices"
          },
          1
        ]
      }
    }
  },
  {
    $unwind: "$totalPrices"
  },
  {
    $match: {
      $expr: {
        $ne: [
          "$price",
          "$totalPrices.totPrice"
        ]
      }
    }
  }
])

MongoPlayGroundLink

...