В коллекции mongodb у меня есть следующие документы:
{"id":"1234","name":"John","stateCode":"CA"}
{"id":"1234","name":"Smith","stateCode":"CA"}
{"id":"1234","name":"Tony","stateCode":"GA"}
{"id":"3323", "name":"Neo","stateCode":"OH"}
{"id":"3323", "name":"Sam","stateCode":"US"}
{"id":"4343","name":"Bruce","stateCode":"NV"}
Я пытаюсь написать агрегированный запрос mon go, который выполняет следующие действия:
- на основе соответствия в
id
поле Дайте больший приоритет документу, имеющему значения, отличные от "NV" или "GA" в поле stateCode
.
Если все документы имеют значения «NV» или «GA», игнорируйте приоритет. Если у какого-либо документа есть stateCode
, отличный от "NV" или "GA", верните этот документ.
Пример 1:
id = "1234"
then return
{"id":"1234","name":"John","stateCode":"CA"}
{"id":"1234","name":"Smith","stateCode":"CA"}
Пример 2 :
id = "4343"
then return
{"id":"4343","name":"Bruce","stateCode":"NV"}
Не могли бы вы помочь с запросом, чтобы добиться этого.
Я пытался с запросом, но я застрял с ошибкой:
Failed to execute script.
Error: command failed: {
"ok" : 0,
"errmsg" : "input to $filter must be an array not string",
"code" : 28651,
"codeName" : "Location28651"
} : aggregate failed
Запрос :
db.getCollection('emp').aggregate([{$match:{
'id': "1234"
}
},
{
$project: {
"data": {
$filter: {
input: "$stateCode",
as: "data",
cond: { $ne: [ "$data", "GA" ],$ne: [ "$data", "NV" ] }
}
}
}
}
])