Я унаследовал эту MongoDB, которая используется в качестве кеша. _Id всех документов в коллекции являются строками, такими как:
_someCommonLibraryName.ConnectorLib_2016_2_0.InventoryItem:MODERN CATCH 8 ATGR+ HCP
(Да, это _id.)
Проблема, кажется, связана с любыми _ids с символом плюс в них.
Когда я запрашиваю коллекцию следующим образом:
var proj = new ProjectionDefinitionBuilder<BsonDocument>().Include("_id").Include("internalId");
var findFilter = Builders<BsonDocument>.Filter.And(
Builders<BsonDocument>.Filter.Eq("recordType", itemName),
Builders<BsonDocument>.Filter.Exists("internalId"),
Builders<BsonDocument>.Filter.Not(Builders<BsonDocument>.Filter.Type("internalId", BsonType.Null)),
Builders<BsonDocument>.Filter.Eq("success", true)
);
objsWithInternalId = collection.Find<BsonDocument>(findFilter).Project(proj).ToEnumerable();
Я получаю ObjectID для поля _id только для небольшого подмножества результатов (все из которых имеют символы плюс в _id). Все _ids без символа плюс являются строками.
Я попытаюсь заставить их изменить документы так, чтобы длинная строка была превращена в поле, и чтобы все _id были идентификаторами объектов, но в то же время я хотел бы выяснить, что я могу сделать, чтобы получить строковый результат для ВСЕХ _ids.
Заранее спасибо.