Reputation: 13
I have a collection on MongoDb with a similar stricture to the object below.
{
_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"
}
]
}
Elsewhere in the system an array of "userIds" is generated and I need to select all groups that contain all userIds in the array.
Is it possible to do this using just linq?
I know I can use this if I had just an array of userIds:
from g in groups.AsQueryable<Group>() where g.Users.ContainsAll(usersIds.ToArray()) select g;
Is there something similar for querying an array of subdocumnets instead of an array of strings?
Upvotes: 1
Views: 1910
Reputation: 1234
Here's how I'd do it in a MongoDB query:
db.collection.find({ "users.userId": { $all: [ "1111111", "2222222", "3333333" ] }})
I think LINQ will be quite a bit trickier. Does this work (I don't have MongoDB installed)?
from g in groups.AsQueryable<Group>() where g.Users.ConvertAll(u => g.UserId).AsQueryable().ContainsAll(userIds) select g;
Even if it did I suspect that it will not be as performant as using the MongoDB query builder:
groups.Find(Query.All("users.userId", userIds))
Upvotes: 1