我有一份文件,如下所示
这是该文档的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?
答案 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();