【问题标题】:Getting a specific item from a list in BsonDocument从 BsonDocument 中的列表中获取特定项目
【发布时间】:2021-04-27 19:24:47
【问题描述】:

我正在尝试从 BsonDocument 中带有 Where() 的列表中获取一个项目以形成查询。 Participants 是List<User>,我想从那里获得特定的参与者。 ComponentsList<BsonDocument>,这使得使用 ["key"] 进行索引成为可能,因为对象上的属性尚不清楚。

var rec = (await _context.Records
                        .Where(r =>
                        r.Components.Any(c =>
                        c["StartTime"] == record.StartTime &&
                        c["Participants.Number"] == record.Organizer.Number))
                        .GetAsync())
                        .LastOrDefault();

["Participants.Number"] 在列表中工作,但我只想检查列表中的特定(第二个)参与者,我尝试了以下操作:

p["Participants[1].Number"]

p["Participants"][1]["Number"]

我也尝试先转换为BsonArray 和其他LINQ 功能,但没有成功找到解决方案。

【问题讨论】:

  • 您使用的是哪个 BsonDocument 框架?蒙哥?
  • 是的,我正在使用 MongoDB 驱动程序和MongoDB.Bson
  • 您是否尝试过“Participants.1.Number”,因为这是 mongo 在内部引用它的方式
  • 我没有,我试试看告诉你
  • 我相信它有效!感谢您的帮助,如果我想要列表中的最后一项(列表可以有可变长度),您知道我应该怎么做

标签: c# mongodb bson


【解决方案1】:

问题是查询没有在你的代码中运行,它被传递到底层数据库,与 c# 不同,mongo 不使用方括号表示法进行数组索引,它使用与对象表示法相同的索引,所以你需要 @ 987654321@而不是[1]

【讨论】:

  • 这是否意味着我可以在括号中做所有的 Mongo 索引?
  • 如果你从 mongo 返回数据并在 c# 中查询是的,但你最好让 mongo 处理查询,所以你需要按照 mongo 标准工作
  • 让mongo处理查询是什么意思?顺便说一句,谢谢
  • 当前您正在 bsonDocument 中编写一个查询,该查询被传递给 mongo 运行,因此您需要使用 mongo 索引语法,另一种选择是使用返回的更小的查询更多的记录到您的代码中,然后您可以使用“LINQ to Objects”在代码中提供额外的结果过滤,虽然这会比让mongo过滤掉您不想要的记录效率低得多
猜你喜欢
  • 2011-11-22
  • 2013-07-22
  • 2012-12-30
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
相关资源
最近更新 更多