[英]Query mongodb with C# driver not working
从互联网上粘贴示例来查询我们的mongodb并寻找一个字段时,我有以下错误。
我看不出我做错了什么,想想如果我不能很快解决它我会回到SQL :(
我只想说能找到带3扇门的汽车。
谢谢你的帮助! 非常感激。
连接代码
public MongoDatabase GetDatabase
{
get
{
MongoClient mc = new MongoClient();
var server = mc.GetServer();
return server.GetDatabase("players");
}
}
代码示例
var numberOfDoors = 3;
var collection = GetDatabase.GetCollection<CarCollection>("Cars");
// Have tried using my Car object instead of BsonDocument but little difference
var filter = Builders<BsonDocument>.Filter.Eq("NumberOfDoors", numberOfDoors);
var result = collection.Find(filter);
错误信息
Argument 1: cannot convert from 'MongoDB.Driver.FilterDefinition<MongoDB.Bson.BsonDocument>' to 'MongoDB.Driver.IMongoQuery'
文件结构
{
"_id" : ObjectId("..."),
"Members" : [
{
"EmailAddress" : "",
...
},
{
"EmailAddress" : "",
...
},
{
"EmailAddress" : "",
...
}
]
}
C#结构
public class MemberCollection
{
public ObjectId _id { get; set; }
public MemberEntity[] Members { get; set; }
}
public class MemberEntity
{
public int _id { get; set; }
public string Password { get; set; }
public string EmailAddress { get; set; }
}
更新 - 显示错误消息
文件结构
更新#2
更新3
你的下线错了
Builders<BsonDocument>.Filter.Eq("NumberOfDoors", numberOfDoors);
它应该在下面,因为你试图在CarCollection
上放置一个过滤器。 这是错误的根源。
Builders<CarCollection>.Filter.Eq("NumberOfDoors", numberOfDoors);
根据您最近的编辑,您应该将过滤器定义更改为下面,因为您实际上是尝试将过滤器放置在嵌套的member
对象数组上
var filter = Builders<MemberCollection>.Filter.Eq("Members.EmailAddress", emailAddress);
等效的MongoDB查询将是
db.Getcollection('Members').Find({"Members.EmailAddress": "test@msn.com"})
编辑:
不知道你的结局有什么问题,但试试如下
var collection = _mongoclientProvider.GetDatabase.GetCollection<MemberCollection>("Members");
Expression<Func<MemberCollection, bool>> expression = mc => mc.Members.Any(m => m.EmailAddress == emailAddress);
var list = collection.Find(expression).ToList();
您正在错误地使用Builders<CarCollection>.Filter.Eq()
:
var numberOfDoors = 3;
var collection = ..GetCollection<CarCollection>("Cars");
var builder = Builders<CarCollection>.Filter;
var filt = builder.Where(car => car.NumberOfDoors == numberOfDoors);
var list = await collection.Find(filt).ToListAsync();
这假定:
public class CarCollection : IEnumerable<Car> { ... }
和
public class Car { public int NumberOfDoors { get; set; } ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.