如何在蒙戈文档中查询字典

本文关键字:查询 字典 文档 | 更新日期: 2023-09-27 18:13:27

我有一个文档,如下所示

这是文档的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; }
}

这是文档的BSON结构

/* 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)
            }
        ]
    ]
}

我需要有"名称"为"FirstUser"的所有文档,为此我如何形成MONGO QUERY?

如何在蒙戈文档中查询字典

这里的问题是您的字典键是数字。通常你会使用像"User.1.Name": "FirstUser"这样的东西,但这个语法实际上做了别的事情:查找User中包含Name=FirstUser的第二个元素(因为索引是从零开始的)。

如果User中只有一个键,则可以使用"User.0.Name": "FirstUser"

您可以在mongo shell中使用以下命令:

db.collection.find({'User.Name': 'FirstUser'});

或者从c#驱动程序中执行以下操作:

var c = await wat.FindAsync(x => x.User[0].Name == "FirstUser");
var metaData = await c.ToListAsync();
Here is on example that works for me:
`var query = new Dictionary<string, object>()`
            {
                { "$match", new { id = 11 }}
             };`
 
var result = services.Query<objectType>(query);