В моей базе данных есть следующая коллекция
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "2Z00CInO",
"firstid" : "markt1995",
"secondid" : "ninee87"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "fl981nhg",
"firstid" : "violentee9",
"secondid" : "markt1995"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "birk8mn",
"firstid" : "eve1992",
"secondid" : "toms78"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2015",
"identifier" : "09man1l",
"firstid" : "markt1995",
"secondid" : "eve1992"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2017",
"identifier" : "8h06KnO",
"firstid" : "markt1995",
"secondid" : "zepp988"
}
Мой желаемый результат:
Все документы, в которых поля 'firstid' и 'secondid' являются одними изИдентификаторы документа И поле 'year' больше или равно 2018
И 'firstid' + 'secondid' оба одновременно в документе И поле 'year' больше или равно 2015
У меня есть $ match stage, которые правильно выбирают 1. и 2., но я не могу объединить их, чтобы получить его в одном выводе.
Есть мои значения дляпеременные из запроса, я использую nodejs:
var firstid = markt1995
var secondid = eve1992
Существует запрос $ match для извлечения документов из первого критерия
$match: {
$and: [{
$or: [{
'firstid': {
"$in": [firstid, secondid]
}
},
{
'secondid': {
"$in": [firstid, secondid]
}
}
],
$and: [{
'year': {
$gte: 2018
}
}],
}]
}
вывод:
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "2Z00CInO",
"firstid" : "markt1995",
"secondid" : "ninee87"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "fl981nhg",
"firstid" : "violentee9",
"secondid" : "markt1995"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "birk8mn",
"firstid" : "eve1992",
"secondid" : "toms78"
}
Существует запрос $ match для извлечения документов из второго критерия
$and: [{
$or: [{
'firstid': {
"$in": [firstid, secondid]
},
'secondid': {
"$in": [firstid, secondid]
}
}],
$and: [{
'year': {
$gte: 2015
}
}]
}]
вывод:
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2015",
"identifier" : "09man1l",
"firstid" : "markt1995",
"secondid" : "eve1992"
}
Требуемый выводв одном запросе:
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "2Z00CInO",
"firstid" : "markt1995",
"secondid" : "ninee87"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "fl981nhg",
"firstid" : "violentee9",
"secondid" : "markt1995"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2018",
"identifier" : "birk8mn",
"firstid" : "eve1992",
"secondid" : "toms78"
},
{
"_id" : ObjectId("5bdba3101efdd9172de0b52f"),
"year" : "2015",
"identifier" : "09man1l",
"firstid" : "markt1995",
"secondid" : "eve1992"
}