比较同一集合中的两个字段
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 如果解决了您的问题,请标记为答案。以上是关于比较同一集合中的两个字段的主要内容,如果未能解决你的问题,请参考以下文章