C# 如何在Mongo文档中查询词典?

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

我有一份文件,如下所示

这是我对该文档的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 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查询,因为我首先进行查询,然后尝试获取文档。如何做到这一点这是可行的,但这里的问题是,用户可以是任何一个我们不知道它在字典中总是排在第一位的地方。在这种情况下,你能给你的模式举个例子吗?