CosmosDB mongodb - $ all в сочетании с запросом $ elemMatch для вложенной коллекции объектов, которые не работают должным образом - PullRequest
0 голосов
/ 24 октября 2018

Я использую CosmosDB (с mongodb-api).

Для этого примера я использую следующие документы:

/* 1 */
{
    "_id" : "abspi4lxwfbfjahdvjm3clnnl4",
    "categories" : [ 
        {
            "_name" : "category-1",
            "date" : NumberLong(1540373282070),
            "string" : "20",
            "number" : 20
        }, 
        {
            "_name" : "category-2",
            "string" : "1",
            "number" : 1
        }
    ]
}

/* 2 */
{
    "_id" : "ggi36vpvprdbrdnji5otypbh3e",
    "categories" : [ 
        {
            "_name" : "category-2",
            "date" : NumberLong(1540373282071),
            "string" : "1",
            "number" : 1
        }
    }
}

/* 3 */
{
    "_id" : "kdh3jdyenapq54clufgajmgfy8",
    "categories" : [ 
        {
            "_name" : "category-1",
            "date" : NumberLong(1540373282070),
            "string" : "20",
            "number" : 20
        }, 
        {
            "_name" : "category-2",
            "string" : "1",
            "number" : 1
        },
        {
            "_name" : "category-3",
            "string" : "29",
            "number" : 29
        }
    ]
}

Мне нужно получить документы 1 и 3, следующее совпадение запросов отлично работает в mongoDB.

db.getCollection('test_collection')
    .find({"categories":{
        "$all":[
            {"$elemMatch":{"number":20}},
            {"$elemMatch":{"number":1}}
        ]
     }
})

В CosmosDB возвращает 0 записей. Кажется, что более 1 elemMatch в cosmosDB не поддерживается.Любая идея, если это возможно сделать запрос в CosmosDB с mongoDB-api?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Эта проблема была решена для новых баз данных, созданных в конце октября 2018. Мы провели большой тест для проверки совместимости и отлично работают.

На этот раз нам повезло, мы думали изменить всю системук documentDB с SQL-запросом.

Я надеюсь, что этот пост поможет другим людям, которые, возможно, окажутся в такой же ситуации.

0 голосов
/ 25 октября 2018

В CosmosDB возвращает 0 записей. Кажется, что более 1 elemMatch в cosmosDB не поддерживается.

Да, основываясь на моем тесте, комбинация оператора $and и более того1 Условия elemMatch не поддерживаются в API Cosmos Mongo.Насколько мне известно, CosmosDB просто поддерживает подмножество API MongoDB и переводит запросы в SQL-код CosmosDB.У CosmosDB есть несколько вариантов поведения и результатов.Но ответственность за улучшение эмуляции MongoDB лежит на CosmosDB.

Конечно, вы можете добавить отзыв здесь , чтобы отправить ваши требования или рассмотреть возможность использования MongoDB Atlas в Azure, есливам нужна полная поддержка функций MongoDB.

Надеюсь, она вам поможет.

...