我创建了一个集合,并通过将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; }
}
答案 0 :(得分:0)
从集合中检索文档并将其ObjectId作为字符串。
您需要将其转换为ObjectId类型对象。
new ObjectId(“string objectid”)
这就是我们在nodejs中所做的事情。请检查C#mongodb驱动程序文档
答案 1 :(得分:0)
正如Alex Blex在我提出的评论中提到的那样,这是由于区分大小写。 这是他的答案:
它区分大小写。
"companyID" != "CompanyID"
。基本上companyID
在您的任何文档中都未定义,因此所有文档都符合条件companyID:null