首页 > 解决方案 > $Cond 和 $Eq 在 $Project - C# 驱动程序 MongoDB

问题描述

我在反序列化 BsonDocuments 类型中遇到了一个小问题,我找不到原因,但我有一些线索,也许是关于 {0 fields},因为错误告诉我我有 {0 fields} 的列。我还意识到它是一个 {}(空数组)。

我对 ROBO 3T 的 MONGO 查询及其结果

我的 C# MONGO 查询

 var connString = "mongodb+srv";
            var client = new MongoClient(connString);
            var database = client.GetDatabase("Base");
            var collection = database.GetCollection<BsonDocument>("collection");

            var match1 = new BsonDocument("$match", new BsonDocument("PartnerId", "2021"));
            var match2 = new BsonDocument("$match", new BsonDocument("CD_CLIENTE", codCond));

            var project = new BsonDocument { { "$project", new BsonDocument { { "_id", 0 }, { "CD_CLIENTE", 1 }, { "CD_ACESSO", 1 },
                 { "ID_ACESSO", 1 },{ "NOME", 1 },{ "NU_TELEFONE", 1 }, { "EMAIL", 1 }, { "NU_KIPER_RF", 1 },  { "NU_KIPER_TAG", 1 },
                  { "FG_KIPER_MOBILE", 1 },{ "KEY_HASH", 1 },}}}; MY MONGO AND RESULT

            var sort = new BsonDocument("$sort", new BsonDocument("NOME", 1));

            var pipeline = new[] { match1, match2, project, sort };
            var result = collection.Aggregate<BsonDocument>(pipeline).ToList();

            var lista = JsonConvert.DeserializeObject<List<UsuariosAcessos>>(result.ToJson());

错误在这里:

        var lista = JsonConvert.DeserializeObject<List<UsuariosAcessos>>(result.ToJson());

Exatly 当我尝试将“空数组”反序列化为 Model int 时?我找到了一个解决方法,因为我只需要知道我们在 NU_KIPER_TAG 和 NU_KIPER_RF 中是否有某些东西,所以,我做了这个新的 Mongo 查询。 使用 $COND 的新 MONGO 查询

db.dbACESSO.aggregate([

{
    $match: { PartnerId: "2021", CD_CLIENTE: 4003}
},

{
    $project: {_id:0, CD_CLIENTE:1, CD_ACESSO:1, ID_ACESSO:1, NOME:1, NU_TELEFONE:1,EMAIL:1, FG_KIPER_MOBILE:1,
       TAG:{$cond: [{ $eq: [ "$NU_KIPER_TAG", {}]}, 0, 1 ]}, CONTROLE:{$cond: [{ $eq: [ "$NU_KIPER_RF", {}]}, 0, 1 ]},            
       APPATIVO:{$cond: [{ $eq: [ "$KEY_HASH", {}]}, "", "$KEY_HASH" ]}}

}

])

我无法将它翻译成 C#,我很努力,但我不熟悉 sintaxe。我也用谷歌搜索了一个没有成功的样本。

我认为它是这样的:

var project = new BsonDocument {
                {
                    "$project", new BsonDocument { { "_id", 0 }, { "CD_CLIENTE", 1 }, { "CD_ACESSO", 1 },{ "ID_ACESSO", 1 },{ "NOME", 1 }
                        ,{ "NU_TELEFONE", 1 }, { "EMAIL", 1 }, { "NU_KIPER_RF", 1 },  { "NU_KIPER_TAG", 1 },{ "FG_KIPER_MOBILE", 1 },{ "KEY_HASH", 1 },


                        {"TAG", new BsonDocument{{"$cond", new BsonDocument {{ "$eq",  "$NU_KIPER_TAG", "{}"}}, 0, 1 ]}, } }
                    }
                }
            }; 

标签: c#mongodb

解决方案


试试这个方法,它会工作的!

var project = new BsonDocument
            {
                {
                    "$project", new BsonDocument
                    {
                        { "_id", 0},
                        { "CD_CLIENTE", 1},
                        { "CD_ACESSO", 1 },
                        { "NOME", 1},
                        { "EMAIL", 1 },
                        { "FG_KIPER_MOBILE", 1 },
                        { "GRUPO", "$GRUPO.NM_DESCRICAO" },
                        { "UNIDADE", "$UNIDADE.NM_DESCRICAO" },                        
                        { "NU_TELEFONE", new BsonDocument{{ "$cond", new BsonArray{new BsonDocument{{"$eq", new BsonArray{ "$NU_TELEFONE", new BsonDocument { } } }}, "","$NU_TELEFONE" } }}},
                        { "TAG", new BsonDocument{{ "$cond", new BsonArray{new BsonDocument{{"$eq", new BsonArray{ "$NU_KIPER_TAG", new BsonDocument { } } }}, 0,1 } }}},
                        { "CONTROLE", new BsonDocument{{ "$cond", new BsonArray{new BsonDocument{{"$eq", new BsonArray{ "$NU_KIPER_RF", new BsonDocument { } } }}, 0,1 } }}},
                        { "APPATIVO", new BsonDocument{{ "$cond", new BsonArray{new BsonDocument{{"$eq", new BsonArray{ "$KEY_HASH", new BsonDocument { } } }}, "", "$KEY_HASH" } }}},
                    }
                }
            };

空数组将表示为:new BsonDocument { }

{ "NU_TELEFONE", new BsonDocument{{ "$cond", new BsonArray{new BsonDocument{{"$eq", new BsonArray{ "$NU_TELEFONE", new BsonDocument { } } }}, "","$NU_TELEFONE" } }}},

推荐阅读