Как сделать фильтр в mongoDb? - PullRequest
       7

Как сделать фильтр в mongoDb?

0 голосов
/ 03 сентября 2018

У меня есть коллекция, где я храню, как показано ниже

 "role" : [ 
                {
                    "role_id" : "599adabbef17f85afbcee00d",
                    "earn" : {
                        "5943c3f7c74b036a883efaf0" : "E2",
                        "5943c46ec74b036a883efaf1" : "E0",
                        "594a0b08c74b030a2ae33cce" : "E2",
                        "5943c3f7c74b036a883efaf0" : "E5",
                        "5943c46ec74b036a883efaf1" : "E0",
                        "594a0b08c74b030a2ae33cce" : "E4"
                    }
                 }
           ]

Мне нужно получить только значение заработка, у которого нет «E0».

 "5943c3f7c74b036a883efaf0" : "E2",
 "594a0b08c74b030a2ae33cce" : "E2",
 "5943c3f7c74b036a883efaf0" : "E5",
 "594a0b08c74b030a2ae33cce" : "E4"

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать запрос агрегации следующим образом

db.roles.aggregate([
  {$unwind: "$role" },
  {$project : { earn : { $objectToArray: "$role.earn" }}},
  {$unwind : "$earn" },
  {$match: { "earn.v" : { $ne : "E0" }}},
]);

При выполнении в следующей коллекции

> db.roles.find().pretty()
{
        "_id" : ObjectId("5b8d4db5217b959d85f79899"),
        "role" : [
                {
                        "role_id" : "599adabbef17f85afbcee00d",
                        "earn" : {
                                "5943c3f7c74b036a883efaf0" : "E5",
                                "5943c46ec74b036a883efaf1" : "E0",
                                "594a0b08c74b030a2ae33cce" : "E4"
                        }
                }
        ]
}

Вы получите следующий вывод

> db.roles.aggregate([
...   {$unwind: "$role" },
...   {$project : { earn : { $objectToArray: "$role.earn" }}},
...   {$unwind : "$earn" },
...   {$match: { "earn.v" : { $ne : "E0" }}},
... ]);
{ "_id" : ObjectId("5b8d4db5217b959d85f79899"), "earn" : { "k" : "5943c3f7c74b036a883efaf0", "v" : "E5" } }
{ "_id" : ObjectId("5b8d4db5217b959d85f79899"), "earn" : { "k" : "594a0b08c74b030a2ae33cce", "v" : "E4" } }
0 голосов
/ 03 сентября 2018

Учитывая эту схему:

{ 
    "_id" : ObjectId("5b8d29d239bd595000edf3ee"), 
    "role" : [
        {
            "role_id" : "599adabbef17f85afbcee00d", 
            "earn" : {
                "5943c3f7c74b036a883efaf5" : "E2", 
                "5943c46ec74b036a883efaf1" : "E0", 
                "594a0b08c74b030a2ae33cce" : "E2", 
                "5943c3f7c74b036a883efaf0" : "E5", 
                "5943c46ec74b036a883efab1" : "E0", 
                "594a0b08c74b030a2ae34cce" : "E4"
            }
        }, 
        {
            "role_id" : "599adabbef17f85afbcee02d", 
            "earn" : {
                "6943c3f7c74b036a883efaf5" : "E2", 
                "6943c46ec74b036a883efaf1" : "E0", 
                "694a0b08c74b030a2ae33cce" : "E2", 
                "6943c3f7c74b036a883efaf0" : "E5", 
                "6943c46ec74b036a883efab1" : "E0", 
                "694a0b08c74b030a2ae34cce" : "E4"
            }
        }
    ]
}

Попробуйте это ниже агрегации

   { 
    "_id" : ObjectId("5b8d29d239bd595000edf3ee"), 
    "role" : [
        {
            "role_id" : "599adabbef17f85afbcee00d", 
            "earn" : {
                "5943c3f7c74b036a883efaf5" : "E2", 
                "5943c46ec74b036a883efaf1" : "E0", 
                "594a0b08c74b030a2ae33cce" : "E2", 
                "5943c3f7c74b036a883efaf0" : "E5", 
                "5943c46ec74b036a883efab1" : "E0", 
                "594a0b08c74b030a2ae34cce" : "E4"
            }
        }, 
        {
            "role_id" : "599adabbef17f85afbcee02d", 
            "earn" : {
                "6943c3f7c74b036a883efaf5" : "E2", 
                "6943c46ec74b036a883efaf1" : "E0", 
                "694a0b08c74b030a2ae33cce" : "E2", 
                "6943c3f7c74b036a883efaf0" : "E5", 
                "6943c46ec74b036a883efab1" : "E0", 
                "694a0b08c74b030a2ae34cce" : "E4"
            }
        }
    ]
}

вернет:

{ 
    "5943c3f7c74b036a883efaf5" : "E2", 
    "594a0b08c74b030a2ae33cce" : "E2", 
    "5943c3f7c74b036a883efaf0" : "E5", 
    "594a0b08c74b030a2ae34cce" : "E4", 
    "6943c3f7c74b036a883efaf5" : "E2", 
    "694a0b08c74b030a2ae33cce" : "E2", 
    "6943c3f7c74b036a883efaf0" : "E5", 
    "694a0b08c74b030a2ae34cce" : "E4"
}

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...