gpt4 book ai didi

c# - MongoDB 哈希表平均值

转载 作者:可可西里 更新时间:2023-11-01 10:36:27 31 4
gpt4 key购买 nike

我正在使用 C# 以及 MongoDB。我有一节课可以与此类似。它是一个示例,代表了一些东西,请不要评论类设计

[CollectionName("Venues")]
public class Venue
{
public string Name { get; set; }
public dictionary<string,object> Properties { get; set; }
}

var venue = new Venue
{
Name = "Venue 1",
Properties = new Dictionary<string,object>
{
{ "Chairs", "18" },
{ "Tables", "4" },
{ "HasWaterfall", true }
}
}

假设我在集合中有一个对象,它看起来像这样。我想找出有可能做两件事。

1:从数据库中加载,只有字典中的单个条目, 目前我只能通过加载整个 从数据库记录,然后手动key取值。

2:确定数据库中单个项目的平均值。 例如,在所有记录中,我想计算出平均值 椅子,再次不加载所有记录,然后在内存中执行 linq 等....

最佳答案

基本上您的示例文档被存储为以下 JSON:

{
"_id" : ObjectId("..."),
"Name" : "Venue 1",
"Properties" : {
"Chairs" : "18",
"Tables" : "4",
"HasWaterfall" : true
}
}

这使您可以使用点符号定义投影:

var filter = Builders<Venue>.Filter.Eq(f => f.Name, "Venue 1");
var projection = Builders<Venue>.Projection.Include("Properties.Chairs");

List<BsonDocument> data = Col.Find(filter).Project(projection).ToList();

在 BsonDocument 之后返回:

{ "_id" : ObjectId("..."), "Properties" : { "Chairs" : "18" } }

要获得平均值,您需要使用 $toInt MongoDB 4.0 中引入的运算符,用于将您的值从字符串转换为 int。尝试:

var project = new BsonDocument()
{
{ "chairs", new BsonDocument() { { "$toInt", "$Properties.Chairs" } } }
};

var group = new BsonDocument()
{
{ "_id", "null" },
{ "avg", new BsonDocument() { { "$avg", "$chairs" } } }
};

var avg = Col.Aggregate().Project(project).Group(group).First();

关于c# - MongoDB 哈希表平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365130/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com