MongoDB 正在将 ObjectID 的字段标识为 null,即使该值存在

MongoDB is identifying field with ObjectID as null even thought the value exists

我创建了一个集合并通过将 4 个字段分组为唯一字段来添加索引键。

这里是字段和值的例子。

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

companyID 的 ObjectID,我从另一个集合的文档 ID 中获取它作为它的 ID。

我尝试通过 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"

现在的问题是,当我尝试使用 {companyID:ObjectID("5b062d5be75ed035f057bf05")} 在 SomeClass 集合中查找文档时,我无法找到它。 但是如果我使用 {companyID:null}。它正在返回文档。

而且我无法添加任何具有相同用户名、区域代码和批号但公司 ID 不同的新文档,"as duplicate key error collection" 即使 ID 来自具有全新 ID 的新创建的公司对象,也会发生这种情况。 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; }
}

当您从集合中检索文档并获取其 ObjectId 时,它是一个字符串。

您需要将其转换为 ObjectId 类型对象。

新 ObjectId("string objectid")

这就是我们在nodejs中所做的。请检查 C# mongodb 驱动程序文档

正如 Alex Blex 在我的问题下的评论中所提到的,这是由于区分大小写。 这是他的回答:

It's case sensitive. "companyID" != "CompanyID". Basically companyID is undefined in any of your documents so all of them match criteria companyID:null