You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to Use Intersect

To return only documents that match all provided sub-queries, use the intersect method which enables RavenDB to perform server-side intersection queries.

Syntax

IDocumentQuery<T> intersect();

Example

// return all T-shirts that are manufactured by 'Raven'
// and contain both 'Small Blue' and 'Large Gray' types
List<TShirt> tShirts = session
    .query(TShirt.class, TShirts_ByManufacturerColorSizeAndReleaseYear.class)
    .whereEquals("manufacturer", "Raven")
    .intersect()
    .whereEquals("color", "Blue")
    .andAlso()
    .whereEquals("size", "Small")
    .intersect()
    .whereEquals("color", "Gray")
    .andAlso()
    .whereEquals("size", "Large")
    .toList();
public static class TShirts_ByManufacturerColorSizeAndReleaseYear extends AbstractIndexCreationTask {
    public static class Result {
        private String manufacturer;
        private String color;
        private String size;
        private int releaseYear;

        public String getManufacturer() {
            return manufacturer;
        }

        public void setManufacturer(String manufacturer) {
            this.manufacturer = manufacturer;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public String getSize() {
            return size;
        }

        public void setSize(String size) {
            this.size = size;
        }

        public int getReleaseYear() {
            return releaseYear;
        }

        public void setReleaseYear(int releaseYear) {
            this.releaseYear = releaseYear;
        }
    }

    public TShirts_ByManufacturerColorSizeAndReleaseYear() {
        map = "docs.TShirts.SelectMany(tshirt => tshirt.types, (tshirt, type) => new {" +
            "    manufacturer = tshirt.manufacturer," +
            "    color = type.color," +
            "    size = type.size," +
            "    releaseYear = tshirt.releaseYear" +
            "})";
    }
}
from index 'TShirts/ByManufacturerColorSizeAndReleaseYear' 
where intersect(Manufacturer = 'Raven', Color = 'Blue' and Size = 'Small', Color = 'Gray' and Size = 'Large')