Проблема в том, что когда вы запускаете "join", он пытается выполнить сравнение равенства в обоих полях на стороне базы данных.Чтобы считать два значения равными, MongoDB проверяет типы первых и десять значений.Поскольку GameId
имеет тип string
, а Id
хранится как BsonId
, между этими коллекциями совпадений не будет.
Самый простой способ исправить это - изменить ваш класс на:
public class UserGames
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string UserId { get; set; }
[BsonRepresentation(BsonType.ObjectId)]
public string GameId { get; set; }
}
и запустите сценарий в вашей базе данных для преобразования существующих данных.Это может быть что-то вроде:
db.UserGames.aggregate([
{ $addFields: { GameId: { $toObjectId: "$GameId" } } },
{ $out: "UserGames" }
])
Вы можете также попытаться преобразовать типы, используя $ toObjectId или $ toString непосредственно в вашей агрегации, но нет простого иудобный способ сделать это, используя строго типизированный драйвер API.