The official Language Integrated Query (LINQ) provider for querying Couchbase Server 4.0 with N1QL using the Couchbase .NET SDK. The goal of Linq2Couchbase is to create a lightweight ORM/ODM for querying Couchbase Buckets using LINQ as the lingua-franca between your application and Couchbase Server 4.0 using N1QL, a SQL-like query language for JSON documents. It also provides a write API for performing CRUD operations on JSON documents.
The Linq2Couchbase project has the following dependencies:
- Couchbase Server 4.0 or greater with the query service enabled on at least one node
- Couchbase .NET SDK 2.3.10 or greater
- Common.Logging 3.3.1 or greater
- Common.Logging.Core 3.3.1 or greater
- JSON.NET 9.0.1 or greater
- re-linq 2.1.1
If you are using NuGet, then the dependencies (other than Couchbase server) will be installed for you via the package manager.
For a single instance of Couchbase server running on localhost, you can download one here (make sure it's 4.0). If you would like to create a cluster, the easiest way is by using the Vagrant scripts for provisioning clusters can be found here. Additionally, Docker scripts can be found here. Following the directions on each respective link for installation information.
Once you have a Couchbase Server 4.0 instance or cluster setup, open Visual Studio 13 or greater or MonoDevelop and create an MVC Web Application. Open the NuGet Package Manager and search for "Couchbase Linq" or type the following into the Package Manager console:
Install-Package Linq2Couchbase
NuGet will install the package and all dependencies. Once you have the resolved the dependencies, you will initialize a ClusterHelper object which will manage the bucket resources needed by the Linq provider.
Query the 'travel-sample' bucket and return 10 airlines in any order:
ClusterHelper.Initialize(new ClientConfiguration
{
Servers = new List<Uri> {new Uri("http://localhost:8091/")}
});
var context = new BucketContext(ClusterHelper.GetBucket("travel-sample"));
var query = (from a in context.Query<AirLine>()
where a.Country == "United Kingdom"
select a).
Take(10);
query.ToList().ForEach(Console.WriteLine);
ClusterHelper.Close();
Full code list available here.
- The BucketContext: how to use with ASP.NET and Owin/Katana applications
- Mapping JSON fields to POCO properties
- Mapping JSON documents to POCOs with DocumentFilters
- Controlling output with Select
- Filtering with Where
- Sorting and Paging Results
- String Handling
- Math Functions
- Date Handling
- Array Filtering, Projections, and Sorting
- Grouping and Aggregation
- The UseKeys Method
- The UseIndex Method
- JOINing Documents
- NESTing Documents
- UNNESTing Documents
- Any and All
- Testing For NULL And MISSING Attributes
- The META Keyword
- Working With Enumerations
- Asynchronous Queries
- Result Streaming
- Custom JSON Serializers
- Using Read Your Own Write (RYOW) Consistency
- Change Tracking (Experimental Developer Preview)
Linq2Couchbase uses the NuGet package manager for handling dependencies. To build from the source, simply clone the GitHub repository and build in Visual Studio. The NuGet package manager should download all required dependencies.
The jira project is here - you can file bugs, propose features or get an idea for the roadmap there. List of supported and proposed N1QL features can be found here.
Linq2Couchbase is an open source project and community contributions are welcome whether they be pull-requests, feedback or filing bug tickets or feature requests. We appreciate any contribution no matter how bug or small! If you do decide to contribute, please browse the Jira project and ensure that that feature or issue hasn't already been documented. If you want to work on a feature, bug or whatever please create or select a ticket and set the status to "in-progress".