【问题标题】:Query mongodb collection as dynamic查询 mongodb 集合为动态
【发布时间】:2015-05-24 20:08:20
【问题描述】:

我在我的数据库中保存了一个dynamic 对象,但我也想将它作为动态对象检索。如何才能做到这一点?我是这样试的:

public dynamic GetItemById(ObjectId id)
{
    dynamic result = Db.GetCollection<dynamic>("Items").Find(x => x.Id == id).FirstOrDefaultAsync().Result;
    return result;
}

但这给了我以下错误:

CS1963 表达式树可能不包含动态操作

我知道这可以通过使用类型化对象而不是动态对象来解决。但我不想使用任何类型化的对象,因为这违背了使用像 MongoDB 这样的 NoSQL 数据库的全部目的(或者至少,恕我直言)。

我如何通过Id 或任何其他属性使用dynamic 对象查询我的集合?

【问题讨论】:

  • 您使用什么版本的 C# 驱动程序? AFAIK,C# 驱动程序 dynamic,但看看this answer,也许这就是你要找的——尤其是最后一条提到ExpandoObject 的评论。
  • @felix-b 我使用的是 2.0。这就是为什么我也能够首先保存dynamic 对象:) 尝试使用ExpandoObject 进行此操作,但您似乎也无法使用Filter 进行查询。

标签: c# mongodb dynamic


【解决方案1】:

您可以使用基于字符串的语法,因为该表达式对dynamic 没有任何优势:

var cursor = db.GetCollection<dynamic>("foo").
                Find(Builders<dynamic>.Filter.Eq("_id", someId));

【讨论】:

  • 谢谢,这对我有用!但是,我必须将 dynamic 更改为 ExpandoObject 才能使其正常工作。
  • 返回对象的 _id 不是 ObjectId。为此需要任何额外的步骤吗?
  • @MatthewJamesDavis 我也有同样的问题,你找到解决方案了吗?
  • @Vivendi 你可以说:var expandoObject= cursor as ExpandoObject ;
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 2018-12-28
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2017-02-20
相关资源
最近更新 更多