如何查询Mongo文档中的字典?

时间:2016-10-18 11:44:28

标签: 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 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)
            }
        ]
    ]
}

我需要所有将“Name”作为“FirstUser”的文件,为此我如何形成MONGO QUERY?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用以下命令从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();