public void CanDoSimpleQueryOnDatabase() { const string indexName = "CompaniesByName"; using (var store = GetDocumentStore()) { var contact1 = new Contact { FirstName = "Expression Name" }; var contact2 = new Contact { FirstName = "Expression First Name" }; var contact3 = new Contact { FirstName = "First Name" }; using (var commands = store.Commands()) { commands.Put("contacts/1", null, contact1, new Dictionary <string, object> { { "@collection", "Contacts" } }); commands.Put("contacts/2", null, contact2, new Dictionary <string, object> { { "@collection", "Contacts" } }); commands.Put("contacts/3", null, contact3, new Dictionary <string, object> { { "@collection", "Contacts" } }); store.Maintenance.Send(new PutIndexesOperation(new IndexDefinition { Maps = { "from contact in docs.Contacts select new { contact.FirstName }" }, Name = indexName })); WaitForIndexing(store); var companies = commands.Query(new IndexQuery { Query = $"FROM INDEX '{indexName}'" }); Assert.Equal(3, companies.TotalResults); var company = (BlittableJsonReaderObject)companies.Results[0]; string firstName; Assert.True(company.TryGet("FirstName", out firstName)); Assert.Equal("Expression Name", firstName); company = (BlittableJsonReaderObject)companies.Results[1]; Assert.True(company.TryGet("FirstName", out firstName)); Assert.Equal("Expression First Name", firstName); company = (BlittableJsonReaderObject)companies.Results[2]; Assert.True(company.TryGet("FirstName", out firstName)); Assert.Equal("First Name", firstName); } } }
public void BasicFiltering() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { var contact1 = new Contact { FirstName = "First Expression Name" }; var contact2 = new Contact { FirstName = "Expression First Name" }; var contact3 = new Contact { FirstName = "First Name" }; session.Store(contact1); session.Store(contact2); session.Store(contact3); session.Store(new Company { Name = "Company1", Contacts = new List <Contact> { contact1, contact2, contact3 } }); session.Store(new Company { Name = "Company2", Contacts = new List <Contact> { contact1, contact2 } }); session.Store(new Company { Name = "Company3", Contacts = new List <Contact> { contact3 } }); session.SaveChanges(); var companies = session.Query <Company>() .Where(x => x.Contacts.Any(contact => contact.FirstName == "First Name")) .ToArray(); Assert.Equal(2, companies.Length); Assert.Equal(3, companies[0].Contacts.Count); Assert.Equal(1, companies[1].Contacts.Count); companies = session.Query <Company>() .Where(c => c.Name.In(new[] { "Company1", "Company3" })) .ToArray(); Assert.Equal(2, companies.Length); Assert.Equal("Company1", companies[0].Name); Assert.Equal("Company3", companies[1].Name); } } }
public void CanDoSimpleQueryOnDatabase() { const string indexName = "CompaniesByName"; using (var store = GetDocumentStore()) { var contact1 = new Contact { FirstName = "Expression Name" }; var contact2 = new Contact { FirstName = "Expression First Name" }; var contact3 = new Contact { FirstName = "First Name" }; store.DatabaseCommands.Put("contacts/1", null, RavenJObject.FromObject(contact1), new RavenJObject { { "Raven-Entity-Name", "Contacts" } }); store.DatabaseCommands.Put("contacts/2", null, RavenJObject.FromObject(contact2), new RavenJObject { { "Raven-Entity-Name", "Contacts" } }); store.DatabaseCommands.Put("contacts/3", null, RavenJObject.FromObject(contact3), new RavenJObject { { "Raven-Entity-Name", "Contacts" } }); store.DatabaseCommands.PutIndex(indexName, new IndexDefinition() { Maps = { "from contact in docs.Contacts select new { contact.FirstName }" } }, false); WaitForIndexing(store); var companies = store.DatabaseCommands.Query(indexName, new IndexQuery { Query = "" }); Assert.Equal(3, companies.TotalResults); Assert.Equal("Expression Name", companies.Results[0].Value <string>("FirstName")); Assert.Equal("Expression First Name", companies.Results[1].Value <string>("FirstName")); Assert.Equal("First Name", companies.Results[2].Value <string>("FirstName")); } }
public void CanUseMetadataFor() { using (var store = GetDocumentStore()) { new Companies_CompanyByType().Execute(store); Indexes.WaitForIndexing(store); using (var session = store.OpenSession()) { var contact1 = new Contact { FirstName = "FirstName1" }; var contact2 = new Contact { FirstName = "FirstName2" }; var contact3 = new Contact { FirstName = "FirstName3" }; session.SaveChanges(); session.Store(new Company { Type = Company.CompanyType.Public, Contacts = new List <Contact> { contact1, contact2, contact3 } }); session.Store(new Company { Type = Company.CompanyType.Public, Contacts = new List <Contact> { contact3 } }); session.Store(new Company { Type = Company.CompanyType.Public, Contacts = new List <Contact> { contact1, contact2 } }); session.Store(new Company { Type = Company.CompanyType.Private, Contacts = new List <Contact> { contact1, contact2 } }); session.Store(new Company { Type = Company.CompanyType.Private, Contacts = new List <Contact> { contact1, contact2, contact3 } }); session.SaveChanges(); Indexes.WaitForIndexing(store); Companies_CompanyByType.ReduceResult[] companies = session.Query <Companies_CompanyByType.ReduceResult, Companies_CompanyByType>() .OrderBy(x => x.Type) .ToArray(); Assert.Equal(2, companies.Length); Assert.Equal(Company.CompanyType.Private, companies[0].Type); Assert.Equal(5, companies[0].ContactsCount); Assert.NotNull(companies[0].LastModified); Assert.Equal(Company.CompanyType.Public, companies[1].Type); Assert.Equal(6, companies[1].ContactsCount); Assert.NotNull(companies[1].LastModified); } } }