即使值存在,MongoDB也会将ObjectID标识为null

时间:2018-05-24 05:46:21

标签: asp.net .net mongodb mongodb-.net-driver

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

以下是字段和值的示例。

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

公司ID的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}。它正在退回文件。

我无法使用相同的用户名,areaCode和lotNum添加任何具有不同companyID的新文档,"作为重复键错误收集"发生事件后,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; }
}

2 个答案:

答案 0 :(得分:0)

从集合中检索文档并将其ObjectId作为字符串。

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

new ObjectId(“string objectid”)

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

答案 1 :(得分:0)

正如Alex Blex在我提出的评论中提到的那样,这是由于区分大小写。 这是他的答案:

  

它区分大小写。 "companyID" != "CompanyID"。基本上companyID在您的任何文档中都未定义,因此所有文档都符合条件companyID:null