MongoDB идентифицирует поле с ObjectID как ноль, даже если значение существует - PullRequest
0 голосов
/ 24 мая 2018

Я создал коллекцию и добавил индексный ключ, сгруппировав 4 поля как уникальные.

Вот пример поля и значения.

"username":string,
"companyID": ObjectID,
"areaCode": string,
"lotNum":string

ObjectID компании ObjectID, I 'получаю его из идентификатора документа другой коллекции в качестве идентификатора.

Я попытался вставить через драйвер MongoDB .Net и столкнулся с некоторой проблемой.

Company company = new Company()
            {
                CompanyName = "xyz" 
            };

await _company.InsertOneAsync(company); //_company is IMongoCollection object

SomeClass someClass = new SomeClass()
           {
                UserName = "James",
                CompanyID = company.ID, //This is the ObjectID generated by MongoDB
                AreaCode = "ABC",
                LotNum = "1234a"
           };
await _someClass.InsertOneAsync(company); //_someClass is IMongoCollection object

Итак, объект документа в MongoDB будет выглядетькак ниже.Я действительно могу просмотреть документ с помощью Compass.

_id:ObjectID("5b062d5be75ed035f057bf06")
username:"James",
companyID: ObjectID("5b062d5be75ed035f057bf05"),
areaCode: "ABC",
lotNum:"1234a"

Теперь проблема в том, что когда я пытался найти документ в коллекции SomeClass с помощью {companyID:ObjectID("5b062d5be75ed035f057bf05")}, я не могу его найти.Но если я использую {companyID:null}.Он возвращает документ.

И я не могу добавить какой-либо новый документ с тем же именем пользователя, areaCode и lotNum с другим идентификатором компании, «поскольку сбор ошибок дублирующегося ключа» происходит, даже если идентификатор получен недавно созданнымУ объекта компании новый идентификатор.MongoDB все еще говорит, что это NULL.

Я что-то не так делаю?Как я могу исправить эту проблему.

Вот мой объект данных для Company и SomeClass

 public class Company
 {
    public ObjectId Id { get; set; }
    public string CompanyName{ get; set;}
}


 public class SomeClass
 {
    public ObjectId Id { get; set; }

    public string UserName { get; set;}

    [BsonRepresentation(BsonType.ObjectId)]
    public string CompanyID { get; set; }

    public string AreaCode{ get; set; }

    public string LotNum{ get; set; }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Как упомянул Алекс Блекс в комментариях к моему вопросу, это связано с чувствительностью к регистру.Вот его ответ:

Он чувствителен к регистру."companyID" != "CompanyID".Как правило, companyID не определено ни в одном из ваших документов, поэтому все они соответствуют критериям companyID:null

0 голосов
/ 24 мая 2018

при извлечении документа из коллекции и получении его ObjectId в виде строки.

Вам необходимо преобразовать его в объект типа ObjectId.

new ObjectId ("string objectid")

Это то, что мы делаем в nodejs.Пожалуйста, проверьте документы C # mongodb

...