简体   繁体   中英

MongoDB linq C# select document where array of subdocumnets contain all values from string array

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?

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))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM