MongoDBRef在C#中查询MongoDB
我正在尝试获取一个用户的所有照片,通过其用户ID引用进行查询。(我知道Mongo中的嵌入式文档,但我想这样使用它) 以下是我得到的错误:MongoDBRef在C#中查询MongoDB,c#,mongodb,.net-core,mongodb-.net-driver,C#,Mongodb,.net Core,Mongodb .net Driver,我正在尝试获取一个用户的所有照片,通过其用户ID引用进行查询。(我知道Mongo中的嵌入式文档,但我想这样使用它) 以下是我得到的错误:“System.InvalidOperationException:“{UserId.$id}.ToString()不受支持” 这里的问题是,.Find()方法将表达式作为参数,然后当您点击时,.ToList()MongoDB驱动程序尝试将此类表达式转换为MongoDB查询/聚合语言。MongoDB.NET驱动程序不理解{UserId.$id}.ToString
“System.InvalidOperationException:“{UserId.$id}.ToString()不受支持”
这里的问题是,
.Find()
方法将表达式
作为参数,然后当您点击时,.ToList()
MongoDB驱动程序尝试将此类表达式转换为MongoDB查询/聚合语言。MongoDB.NET驱动程序不理解{UserId.$id}.ToString()
,因此会出现异常
要解决此问题,您应该尝试另一种方法-将内存中的变量转换为存储在数据库中的类型,请尝试:
var userIdConverted = ObjectId.Parse(userId); // or use string if it's string in your database
var dbRef = new MongoDBRef("colName", userIdConverted);
var photos = _photos.Find(photo => photo.UserId.Id.ToString() == dbRef );
帖子中的图片而不是代码将花费选票,这反过来可能没有人会看这个问题。@JoelCoehoorn谢谢你让我知道,并感谢你的否决票。我现在正在编辑它。但是你能提供一个原因吗,因为我不知道。从午餐回来。不是我投的反对票;只是想知道为什么它可能在那里。但是有很多理由不使用图像,除了实际得到答案和粘贴代码更容易之外:谢谢@JoelCoehoorn。实际上,我选择了一张图片来强调它崩溃的地方(我认为这是一个不寻常的地方),代码不多,只有几行。但事实上,我从未想过其他不利因素。
public List<User> GetAllUsers() => _users.find(user => true).ToList();
public class User
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
}
public class Photo
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonId]
public string Id { get; set; }
public MongoDBRef UserId { get; set; }
}
var userIdConverted = ObjectId.Parse(userId); // or use string if it's string in your database
var dbRef = new MongoDBRef("colName", userIdConverted);
var photos = _photos.Find(photo => photo.UserId.Id.ToString() == dbRef );