Mon go Запрос нескольких условий с лимитом и пропуском - PullRequest
0 голосов
/ 07 января 2020

Формат документа всех коллекций в db такой:

{
    "_id": {
        "$oid": "5e0983863bcf0dab51f2872b"
    },
    "word": "never",  // get the `word` value for each of below queries
    "wordset_id": "a42b50e85e",
    "meanings": [{
        "id": "1f1bca9d9f",
        "def": "not ever",
        "speech_part": "adverb",
        "synonyms": ["ne'er"]
    }, {
        "id": "d35f973ed0",
        "def": "not at all",
        "speech_part": "adverb"
    }]
}

Я пытаюсь запросить слово / слова,

1) где слово length равно 4 и speech_part - это noun, содержащий ac (% что-то% в sql) в нем (результат будет jack, ......)

2) как добавьте все три starting with, ending with, containing в одном запросе (например, начиная с j, содержащего ac, заканчивая k ---->, вы получите jack)

Я пробовал для 1) как:

    pipeline = [
        {
            "$match": {
                "meanings.speech_part": "noun",
                "word": "/ac/",
                "$expr": {"$eq": [{"$strLenCP": "$word"}, 4]}
            }
        }

    ]
query=db[collection].aggregate(pipeline)

Но я не получил никакого результата для этого, а также как добавить пропуск и ограничение для агрегата, если я буду использовать facet?

ссылаясь на ТАК ответ, я нашел это:

db.Order.aggregate([
    { '$match'    : { "company_id" : ObjectId("54c0...") } },
    { '$sort'     : { 'order_number' : -1 } },
    { '$facet'    : {
        metadata: [ { $count: "total" }, { $addFields: { page: NumberInt(3) } } ],
        data: [ { $skip: 20 }, { $limit: 10 } ] // As shown here------
    } }
] )

1 Ответ

0 голосов
/ 07 января 2020

Для справки Pythonic конвейер будет выглядеть так:

    pipeline = [
            {
                '$match': {
                    "$expr": {"$eq": [{"$strLenCP": "$word"}, 4]},
                    'word': re.compile('ac'),
                    'meanings.speech_part': "noun"
                }
            }
        ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...