我有一个关于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;
是否有类似的查询子数据库数组而不是字符串数组?
答案 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))