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
我创建了一个集合并通过将 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"
. BasicallycompanyID
is undefined in any of your documents so all of them match criteriacompanyID:null