#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())))), Добавленный в конвейер… теперь это работает…