Как я могу исправить этот поиск mongo С# по идентификатору, чтобы он возвращал результат, отличный от нуля?

Я пытаюсь вернуть одно значение из коллекции в моей базе данных MongoDB, однако я получаю возвращаемое нулевое значение, и в коллекции существует документ с этим идентификатором.

    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();

person eagercoder    schedule 05.06.2020    source источник
comment
Идентификатор хранится как ObjectId в базе данных?   -  person D. SM    schedule 05.06.2020
comment
Можете ли вы показать нам один из документов в вашей коллекции с консоли mongo? db.your_collection.findOne()   -  person Kevin Smith    schedule 06.06.2020


Ответы (1)


Не могли бы вы использовать спецификатор свойства вместо строки «_id», например:

var filter = Builders<Business>.Filter.Eq(b => b.Id, businessId);

Я не думаю, что вам нужно превращать идентификатор в ObjectId

person Sachin    schedule 05.06.2020
comment
две проблемы с этим, мне пришлось бы ToString b.Id как этот var filter = Builders‹Business›.Filter.Eq(b =› b.Id.ToString(), businessId); и вторая проблема заключается в том, что он по-прежнему возвращает null - person eagercoder; 05.06.2020
comment
Я предполагаю, что свойство Id имеет тип Guid в вашем классе Business. В этом случае вы не должны передавать этот параметр businessId как строку, а Guid, поэтому проверка на равенство в фильтре, как я предложил, будет сравнивать Guid с Guid. .ToString() не требуется, хотя может понадобиться Guid.Parse(businessId) - person Sachin; 05.06.2020