gpt4 book ai didi

带有 json 字符串的 C# mongo 查询

转载 作者:IT老高 更新时间:2023-10-28 13:12:48 26 4
gpt4 key购买 nike

这似乎很基础,我确信我只是在某个地方忽略了一个类或一个方法,但对于我的生活,我找不到它。

我有一个像这样的 json 字符串:

{ SendId: 4, "Events.Code" : { $all : [2], $nin : [3] } }

我可以在 mongo shell 中针对 find()count() 运行它并得到我正在寻找的东西。在 C# 中处理这个问题的最简单方法是什么?这是我发现的:

  • 我找到的方法都想要一个IMongoQuery,它只是一个标记接口(interface)
  • BsonDocument 有一个不错的 Parse 方法,但它没有实现 IMongoQuery
  • QueryDocument继承自BsonDocument,它确实实现了IMongoQuery,但它没有自己的Parse方法,我做不到将 QueryDocument 转换为 BsonDocument
  • 聚合框架采用 BsonDocument[],但有时我只想要一个简单的 Find 或 Count 操作
  • 其中一些查询很大而且很粗糙,我不想使用 Query 构建器类一次构建一行

如果数据库处理 json 文档,我可以在 shell 中运行这些东西,难道没有办法通过驱动程序运行它吗?

最佳答案

这很难看,但您可以通过将字符串反序列化为 BsonDocument 然后包装在 QueryDocument

中来做到这一点
BsonDocument query = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("{ SendId: 4, 'Events.Code' : { $all : [2], $nin : [3] } }");
QueryDocument queryDoc = new QueryDocument(query);
var result = collection.FindAs<TypeOfResultExpected>(queryDoc); // or just use Find

如果这是您计划经常做的事情,您总是可以将它包装在一个方法中,或者创建一个 JSQueryDocument 类,如下所示:

public class JSQueryDocument : QueryDocument
{
public JSQueryDocument(string query) : base(MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(query))
{
// Probably better to do this as a method rather than constructor as it
// could be hard to debug queries that are not formatted correctly
}
}

/// ...

var result = collection.Find(new JSQueryDocument("{ SendId: 4, 'Events.Code' : { $all : [2], $nin : [3] } }"));

关于带有 json 字符串的 C# mongo 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220959/

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