$in aggregation не работает с массивами, не имеющими разных значений

#php #mongodb

#php #mongodb

Вопрос:

$inaggregation не возвращает true, если искомое значение присутствует в искомом массиве более одного раза.

Рассмотрим следующие записи

 { "_id" : 1, "location" : "24th Street",
  "in_stock" : [ "apples", "oranges", "bananas" ] }
{ "_id" : 2, "location" : "36th Street",
  "in_stock" : [ "bananas", "pears", "grapes" ] }
{ "_id" : 3, "location" : "82nd Street",
  "in_stock" : [ "cantaloupes", "watermelons", "apples" ] }
 

Теперь применяем этот $in aggregation

 db.fruit.aggregate([
  {
    $project: {
      "store location" : "$location",
      "has bananas" : {
        $in: [ "bananas", "$in_stock" ]
      }
    }
  }
])
 

ВОЗВРАТ

 {"_id" : 1, "store location" : "24th Street", "has bananas" : true }
{ "_id" : 2, "store location" : "36th Street", "has bananas" : true }
{ "_id" : 3, "store location" : "82nd Street", "has bananas" : false }
 

но если запись содержит одинаковые множественные значения в массиве

 { "_id" : 1, "location" : "24th Street",
  "in_stock" : [ "bananas", "bananas", "bananas" ] }
{ "_id" : 2, "location" : "36th Street",
  "in_stock" : [ "bananas", "pears", "grapes" ] }
{ "_id" : 3, "location" : "82nd Street",
  "in_stock" : [ "cantaloupes", "watermelons", "apples" ] }
 

он возвращает

 {"_id" : 1, "store location" : "24th Street", "has bananas" : false}
{ "_id" : 2, "store location" : "36th Street", "has bananas" : true }
{ "_id" : 3, "store location" : "82nd Street", "has bananas" : false }
 

Запись 1 также должна возвращать true, потому что в ней есть значение banana . но он не возвращает

Комментарии:

1. Я попробовал с моей стороны, и я получаю правильные результаты.

2. он не работает с mongodb php

3. …конвейер агрегации … , array(‘$addFields’ => array( «isThere» => array( ‘$in’ => array(array(new MongoDB BSON ObjectId($_SESSION[«userid»])), array(‘$arrayField’)) ) ) ,… конвейер агрегации..

4. mongoplayground.net/p/DXUiY48EPeN

5. array(‘$addFields’ => array( «arrayField» => array(‘$ifNull’ => array((‘$arrayField’), array())))), Добавленный в конвейер… теперь это работает…