【问题标题】:Comparing two fields in the same collections比较同一集合中的两个字段
【发布时间】:2021-01-21 06:31:54
【问题描述】:

我在 Mongo 有一个收藏。

我有两个字段:校验和和校验和N-4。

我已经做了一个这样的过滤器:

var filter = Builders<BsonDocument>.Filter.Eq("metadata.origin", sOrigin.ToString())
               & Builders<BsonDocument>.Filter.Eq("metadata.transfered", BsonNull.Value)
              & Builders<BsonDocument>.Filter.Eq("metadata.duplicate", BsonNull.Value)
             & Builders<BsonDocument>.Filter.Eq("metadata.malformed", BsonNull.Value);

我只想拥有字段 checksum 和 checksumN-4 不同的文档。

例如:

Cheksum : 2222222
checksumN-4 : 2222222

我想要这张唱片

Checksum : 8888888
ChecksumN-4 : 8889998

我不想要这个记录

如何在 c# 中做到这一点?

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    为此,您需要 mongoDb Expr。

    首先添加你的项目如:

    var pro = new BsonDocument {
                {"ne1", new BsonDocument {
                    { "$ne", new BsonArray(){ "$Cheksum", "$ChecksumN-4" }
                    }
                } },
                {"other variables", true }
                };
    

    现在你需要实现这个表达式,我们需要为它做一个过滤器。

    var myfilter = Builders<BsonDocument>.Filter.Eq("ne1", true);
    

    您需要合并两个过滤器,例如:

    var ndFilter = Builders<BsonDocument>.Filter.And(yourFilter, myfilter);
    

    您需要将此过滤器和项目放在您的聚合中,它不会返回不同的值。 现在我们的查询已经准备好了。我们可以检查我们的查询如下:

    var query=aggregate.ToString();
    

    让我们按如下方式运行我们的查询:

    var query=aggregate.ToList();
    

    这会在 bson 文档列表中返回所需的数据。

    此解决方案适用于 mongo c# driver 3.6 或更高版本。如有任何混淆,请发表评论。希望我能解释一下。

    【讨论】:

      【解决方案2】:

      您可以尝试使用如下表达式创建BsonDocumentFilterDefinition

       var builder = Builders<BsonDocument>.Filter;
       var filter = builder.Eq("metadata.origin", sOrigin.ToString())
                    & builder.Eq("metadata.transfered", BsonNull.Value)
                    & builder.Eq("metadata.duplicate", BsonNull.Value)
                    & builder.Eq("metadata.malformed", BsonNull.Value)
                    & new BsonDocumentFilterDefinition<BsonDocument>(new BsonDocument(
                          "$expr", new BsonDocument(
                              "$eq", new BsonArray
                              {
                                  "$checksumN-4", "$checksum"
                              })));
      

      【讨论】:

      • @LinedaChouaki 如果解决了您的问题,请标记为答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2023-02-25
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多