如何在mongoDb中进行过滤?

问题描述 投票:0回答:2

我有一个集合,我存储如下

 "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"
mongodb mongodb-query
2个回答
1
投票

您可以使用聚合查询,如下所示

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
投票

考虑这个架构:

{ 
    "_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"
}

希望能帮助到你...

© www.soinside.com 2019 - 2024. All rights reserved.