MongoDB linq C#select document其中子磁盘数组包含字符串数组中的所有值

时间:2014-10-07 01:40:00

标签: c# linq mongodb

我有一个关于MongoDb的集合,对下面的对象有类似的限制。

{
    _id: ObjectId("0000000"),
    groupName: "Group A",
    users[
        {
            userId: "1111111",
            rollDescription: "Some Text Here"
        },
        {
            userId: "2222222",
            rollDescription: "Some Text Here"
        },
        {
            userId: "3333333",
            rollDescription: "Some Text Here"
        }
    ]
}

在系统的其他地方生成一个“userIds”数组,我需要选择包含数组中所有userIds的所有组。

是否可以使用linq来做到这一点?

我知道如果我只有一个userIds数组,我可以使用它:

from g in groups.AsQueryable<Group>() where g.Users.ContainsAll(usersIds.ToArray()) select g;

是否有类似的查询子数据库数组而不是字符串数组?

1 个答案:

答案 0 :(得分:1)

以下是我在MongoDB query中的表现:

db.collection.find({ "users.userId": { $all: [ "1111111", "2222222", "3333333" ] }})

我认为LINQ会相当棘手。这有用吗(我没有安装MongoDB)?

from g in groups.AsQueryable<Group>() where g.Users.ConvertAll(u => g.UserId).AsQueryable().ContainsAll(userIds) select g;

即使它确实存在,我怀疑它不会像使用MongoDB查询构建器那样高效:

groups.Find(Query.All("users.userId", userIds))