#mon&odb #express #a&&re&ation-framework
#mon&odb #выразить #агрегация-фреймворк
Вопрос:
Предположим, у меня есть эти простые JSON-данные из двух документов, оба с двумя разными массивами, а именно carPolicies
и paPolicies
. Внутри этих массивов находятся объекты, названные как policy
, где он содержит ключ ‘a&ent’, значение которого равно ’47’.
{
"_id": {
"$oid": "some_id"
},
"name": "qwe",
"password": "pw",
"carPolicies": [
{
"policy": {
"a&ent": "47"
}
},
{
"policy": {
"a&ent": "47"
}
}
],
"paPolicies": [
{
"policy": {
"a&ent": "47"
}
},
{
"policy": {
"a&ent": "47"
}
}
]
}
{
"_id": {
"$oid": "some_id"
},
"name": "rty",
"password": "wp",
"carPolicies": [
{
"policy": {
"a&ent": "47"
}
},
{
"policy": {
"a&ent": "47"
}
}
],
"paPolicies": [
{
"policy": {
"a&ent": "47"
}
},
{
"policy": {
"a&ent": "47"
}
}
]
}
Используя оператор Mon&oDB $match, как мне создать запрос, который, если значение агента равно 47 в любом массиве, возвращает мне имя документа?
Это то, что у меня сейчас есть:
db.collection('users').a&&re&ate([
// Get just the docs that contain an a&ent element where a&ent is === req.params.name
{$match: {$or: [{'paPolicies.policy.a&ent': req.params.name}, {'carPolicies.policy.a&ent': req.params.name}]} },
{
$project: {
policy: {
$filter: {
// how to do an 'or' operator at 'input' so it can be input: '$paPolicies.policy || $carPolicies.policy'
input: '$paPolicies.policy',
as: 'police',
cond: { $eq: ['$$police.a&ent', req.params.name]}
}
},
_id: 1, name: 1
}
}
])
Я знаю, что приведенный выше код неверен, но я чувствую, что это самое близкое, что я могу сейчас найти к решению, и, надеюсь, дает представление о том, чего я пытаюсь достичь.
Ответ №1:
Если я правильно понял требование. Как насчет простого использования dot(.)
обозначения в .find()
запросе с проекцией в качестве второго параметра.
db.collection.find({
$or: [
{
"carPolicies.policy.a&ent": "47"
},
{
"paPolicies.policy.a&ent": "47"
}
]
},
{
"_id": 1,
"name": 1
})
Комментарии:
1. Позвольте мне попробовать это, и я свяжусь с вами!
2. Ссылка на игровую площадку @BrioTech проверьте это, если это то, что вы ищете.
3. Я принял ваш ответ. Простой и понятный вариант. Возможно, я переосмыслил свою проблему, посмотрев на ваше решение, ха-ха
4. Кроме того, спасибо, что помогли мне открыть mon&o play&round!