比较同一集合中的两个字段

Posted

技术标签:

【中文标题】比较同一集合中的两个字段【英文标题】: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# 中做到这一点?

【问题讨论】:

【参考方案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 如果解决了您的问题,请标记为答案。

以上是关于比较同一集合中的两个字段的主要内容,如果未能解决你的问题,请参考以下文章

如何比较Oracle中的复杂集合?

比较两个数组并返回重复值

使用 FluentAssertions 比较包含不同类型的两个字典集合

在mono中使用c#驱动程序比较mongo集合的两个字段

使用集合来排序

GetHashCode方法学习