如何在蒙戈文档中查询字典
本文关键字:查询 字典 文档 | 更新日期: 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);