C# 如何在Mongo文档中查询词典?
我有一份文件,如下所示 这是我对该文档的C#结构C# 如何在Mongo文档中查询词典?,c#,mongodb,mongodb-query,C#,Mongodb,Mongodb Query,我有一份文件,如下所示 这是我对该文档的C#结构 public class MetaData { [BsonId] public ObjectId _Id { get; set; } [BsonElement("User")] public IDictionary<Int64, FirstUser> User { get; set; } } public class FirstUser { [BsonElement("Name")] public S
public class MetaData
{
[BsonId]
public ObjectId _Id { get; set; }
[BsonElement("User")]
public IDictionary<Int64, FirstUser> User { get; set; }
}
public class FirstUser
{
[BsonElement("Name")]
public String Name { get; set; }
[BsonElement("Id")]
public Int64 Id { get; set; }
}
/* 1 */
{
"_id" : ObjectId("5805c1ced520b54bd4192214"),
"User" : [
[
NumberLong(1),
{
"Name" : "FirstUser",
"_id" : NumberLong(1)
}
]
]
}
/* 2 */
{
"_id" : ObjectId("5805c1ced520b54bd4192215"),
"User" : [
[
NumberLong(1),
{
"Name" : "SecondUser",
"_id" : NumberLong(2)
}
]
]
}
/* 3 */
{
"_id" : ObjectId("5805c1ced520b54bd4192216"),
"User" : [
[
NumberLong(1),
{
"Name" : "ThirdUser",
"_id" : NumberLong(3)
}
]
]
}
/* 4 */
{
"_id" : ObjectId("5805c1ced520b54bd4192217"),
"User" : [
[
NumberLong(1),
{
"Name" : "FourthUser",
"_id" : NumberLong(2)
}
]
]
}
我需要所有“Name”为“FirstUser”的文档,因此如何形成MONGO查询?这里的问题是,您的字典键是数字。通常您会使用类似于
“User.1.Name”:“FirstUser”
,但此语法实际上做了其他事情:在User
中查找第二个元素,该元素具有Name=FirstUser
(因为索引是零基的)
如果在
User
中只有一个键,则可以使用“User.0.Name”:“FirstUser”
您可以使用以下命令从mongo shell执行此操作:
db.collection.find({'User.Name': 'FirstUser'});
var c = await wat.FindAsync(x => x.User[0].Name == "FirstUser");
var metaData = await c.ToListAsync();
或者通过c#驱动程序,您可以执行以下操作:
db.collection.find({'User.Name': 'FirstUser'});
var c = await wat.FindAsync(x => x.User[0].Name == "FirstUser");
var metaData = await c.ToListAsync();
您的BSON架构和类似乎不匹配。。。您的BSON似乎将“用户”作为对象数组的数组,而不仅仅是字典。我可以建议您使用聚合框架来解决它吗?如果是,我可以给你写一个答案。我已经厌倦了它的工作,但这里的问题是我无法获取超过16MB的数据。有时我需要获取超过16MB的数据。实际上,我需要mongo查询,因为我首先进行查询,然后尝试获取文档。如何做到这一点这是可行的,但这里的问题是,用户可以是任何一个我们不知道它在字典中总是排在第一位的地方。在这种情况下,你能给你的模式举个例子吗?