Формат документа всех коллекций в 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------
} }
] )