【问题标题】:How can i fix this mongo c# find by Id to return result other than null?如何修复此 mongo c# find by Id 以返回除 null 以外的结果?
【发布时间】:2020-06-05 09:53:00
【问题描述】:

我正在尝试从我的 MongoDB 数据库中的集合中返回单个值,但是我返回了一个空值,并且集合中存在具有该 id 的文档。

    public async Task<Business> GetBusiness(string businessId)
    {
        var objectId = new ObjectId(businessId);
        var filter = Builders<Business>.Filter.Eq("_id", objectId);
        var entity = await _businessMongoCollection.Find(filter).FirstAsync();
        return entity;
    }

我也尝试过这样做,但结果为空。

var filter = Builders<Business>.Filter.Eq("_id", new ObjectId(businessId));
var foundBusinessTask = await _businessMongoCollection.FindAsync(filter);
var foundBusiness = await foundBusinessTask.SingleOrDefaultAsync();

【问题讨论】:

  • id是否作为ObjectId存储在数据库中?
  • 您能从 mongo 控制台向我们展示您收藏的文档之一吗? db.your_collection.findOne()

标签: c# mongodb asp.net-core mongodb-query mongo-collection


【解决方案1】:

你能不能用属性说明符代替字符串“_id”,像这样:

var filter = Builders&lt;Business&gt;.Filter.Eq(b =&gt; b.Id, businessId);

我认为您不需要将 id 转换为 ObjectId

【讨论】:

  • 这有两个问题,我必须像这样 var filter = Builders.Filter.Eq(b => b.Id.ToString(), businessId) ToString ;第二个问题是它仍然返回 null
  • 我假设 Id 属性是 Business 类中的 Guid 类型。在这种情况下,您不应该将该参数 businessId 作为字符串传递,而是将 Guid 传递,因此我建议的过滤器中的相等性检查会将 Guid 与 Guid 进行比较。不需要.ToString(),尽管您可能需要Guid.Parse(businessId)
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多