CAST supports Couchbase via its NoSQL for .NET extension. Details about how this support is provided for .NET source code is discussed below.
Supported Client Libraries
Supported Operations
Operation | Methods Supported |
---|---|
Create | |
Insert | |
Update | |
Select | |
Delete |
Objects
Icon | Description |
---|---|
DotNet Couchbase Cluster | |
DotNet Couchbase Bucket | |
DotNet Couchbase Collection | |
DotNet Unknown Cluster | |
| DotNet Unknown Couchbase Bucket |
DotNet Unknown Couchbase Collection |
Links
Links are created for transaction and function point needs:
Link type | Source and destination of link | Methods supported |
---|---|---|
belongsTo | From DotNet Couchbase Bucket object to DotNet Couchbase Cluster object | |
useLink | Between the caller .NET Class / Method objects and DotNet Couchbase Buckets/Collections objects |
|
useInsertLink |
| |
useDeleteLink |
| |
useSelectLink | ||
useUpdateLink |
What results can you expect?
Once the analysis/snapshot generation has completed, you can view the results in the normal manner (for example via CAST Enlighten). Some examples are shown below.
Cluster Creation and Bucket Opening (2.x)
Cluster Creation and Bucket Opening
class Program { private static Cluster cluster_1 = new Cluster(); private const string bucket_name = "GeoBucket"; private static IBucket geobucket; static void Main(string[] args) { AuthenticateCluster(); CreateBucket(); CouchbaseOpenBucket(); } private static void AuthenticateCluster() { Console.WriteLine("Cluster Created - Localhost"); var authenticator = new PasswordAuthenticator("Administrator", "123456"); cluster_1.Authenticate(authenticator); } private static void CreateBucket() { var cm = cluster_1.CreateManager(); cm.CreateBucket(bucket_name); } private static void CouchbaseOpenBucket() { geobucket = cluster_1.OpenBucket(bucket_name); return; } }
Using ClusterHelper for cluster and bucket (2.x)
CLUSTERHELPER
private static void TestClusterHelper4() { var config = new ClientConfiguration { Servers = new List<Uri>{ new Uri("http://192.168.56.101:8091"), new Uri("http://192.168.56.102:8091") } }; ClusterHelper.Initialize(config); var chbucket = ClusterHelper.GetBucket("defaultWayt"); }
Cluster, Bucket and Collection Creation (3.x)
Cluster Creation and Bucket Opening
class Program { private const string users_collection = "collection6"; public async Task<Employees> GetTheDoc(Employees value) { var cluster4 = await Cluster.ConnectAsync("couchbase://localhost", "adm", "jim753"); var bucket = await cluster4.BucketAsync("NewBucket"); // get a user-defined collection reference var scope = await bucket.ScopeAsync("tenant_agent_00"); var collection = await scope.CollectionAsync(users_collection); var collection_in_default_scope = await bucket.CollectionAsync("bookings"); } }
Insert Operation (2.x)
InsertDocumentInBucket
private static void InsertDocumentInBucket() { geobucket.Insert(SetKarDoc()); geobucket.Insert(SetGoaDoc()); geobucket.Insert(SetBengaluruDoc()); geobucket.Insert(SetChandigarhDoc()); }
Insert Operation (3.x)
InsertDocumentInBucket
//create public async Task<Employees> PostEmployee(ICluster cluster3, Employees value) { var bucket = await cluster3.BucketAsync(samplebucket); var collection = bucket.DefaultCollection(); // You can access multiple buckets using the same Cluster object. var anotherBucket = await cluster3.BucketAsync("AnotherBucket"); // You can access collections other than the default var customerC = anotherBucket.Scope("customer-c"); var trains = customerC.Collection("trains"); int idvalue = value.id; var collectiondataa= await trains.InsertAsync( idvalue.ToString(),value ); if (collectiondataa == null) { logger.LogError("Error in creating"); } return null; }
Update Operation (2.x)
ReplaceDocumentInBucket
private static void ReplaceDocumentInBucket() { geobucket.Replace(ModifyChandigarhDoc()); }
UpsertDocumentInBucket
private static void UpsertDocumentInBucket() { geobucket.Upsert(MysuruDoc()); }
Decrement
Append/Prepend
Increment
Update Operation (3.x)
ReplaceDocumentInBucket
//update public async Task<Employees> OnlyUpdateEmployee(ICluster cluster_new_2, Employees value) { var bucket = await cluster_new_2.BucketAsync("SmallBucket"); var collection = bucket.DefaultCollection(); // You can access multiple buckets using the same Cluster object. var anotherBucket = await cluster_new_2.BucketAsync("ShiningBucket"); // You can access collections other than the default var customerD = anotherBucket.Scope("customer-D"); var bikes = customerD.Collection("bikes"); int idvalue = value.id; var collectiondataa= await bikes.ReplaceAsync( idvalue.ToString(),value ); if (collectiondataa == null) { logger.LogError("Error in creating"); } return null; }
Select Operation (2.x)
GetDocumentFromBucket
private static void GetDocumentsFromBucket() { var result = geobucket.GetDocument<dynamic>("Goa").Content; }
Select Operation (3.x)
GetDocumentFromBucket
//get public async Task<Employees> GetTheDoc(ICluster cluster4, Employees value) { var bucket = await cluster4.BucketAsync(newbucket); // get a user-defined collection reference var scope = await bucket.ScopeAsync("tenant_agent_00"); var collection = await scope.CollectionAsync(users_collection); var collection_in_default_scope = await bucket.CollectionAsync("bookings"); // Get Document var getResult = await collection.GetAsync("my-document-key"); }
Delete Operation (2.x)
RemoveDocumentFromBucket
private static void DeleteDocumentInBucket() { geobucket.Remove(MysuruDoc()); }
Delete Operation (3.x)
RemoveDocumentFromBucket
public async Task<Employees> DeleteEmployeeById(ICluster cluster1, int id) { try { var bucket = await cluster1.BucketAsync("EmployeesBucket"); // You can access collections other than the default var customer10 = bucket.Scope("customer-10"); var bluecolour = customer10.Collection("bluecolour"); int idvalue = value.id; var collectiondataa = await bluecolour.RemoveAsync( idvalue.ToString() ); if (collectiondataa == null) { logger.LogError("Error in creating"); } return null; } catch (BucketNotFoundException) { logger.LogError("Bucket not found"); throw; } }
N1QL Query (2.x)
Using N1QL
private static void QueryBucketUsingN1QL() { var create_index = "CREATE PRIMARY INDEX ON " + bucket_name; geobucket.Query<dynamic>(create_index); var queryResult = geobucket.Query<dynamic>("SELECT name, state FROM GeoBucket WHERE type = \'city\' and capital=\'Yes\'"); foreach (var row in queryResult.Rows) Console.WriteLine(row); }
N1QL Query (3.x)
Using N1QL
public async Task<List<Employees>> GetEmployees(ICluster cluster_query) { try { var queryResult = await cluster_query.QueryAsync<Employees>("SELECT username,name,email,age,location,srccs,phoneNumber,salary,skill,managerName,address,id FROM Employees ", new Couchbase.Query.QueryOptions()); var queryResult2 = await cluster_query.QueryAsync<Employees>("UPDATE cars SET door = red, window = transparent, WHERE door = blue; ", new Couchbase.Query.QueryOptions()); List<Employees> empList = new List<Employees>(); await foreach (var row in queryResult) { empList.Add(row); } return empList; } catch (IndexFailureException) { logger.LogError("Bucket not found"); throw; } }
Sub-Document Operations
The following methods sub-document operations are supported:
- LookupIn
- MutateIn
- ArrayInsert
- ArrayAppend
- ArrayPrepend
- ArrayAddUnique
- Remove
- Replace
- Insert
- Upsert
LookupIn
LOOKUPIN
public static void LookupInMethod2( string id) { var builder = geobucket.LookupIn<dynamic>(id). Get("type"). Get("country"). Exists("notfound"); }
MutateIn
MUTATEIN
public static void SubDocMisc(string id, string path, string replace_path, object value) { geobucket.MutateIn<dynamic>(id). Remove(path). Replace(replace_path, value). Execute(); }
Asynchronus API
Reading App.config
Evolution
- Support for Couchbase 3.x, which has 3 layers - Clusters, Buckets and Collections.
- Better evaluation of object names.
- Reading of Cluster/Bucket from configuration files for Couchbase 2.x
Limitations
- If bucket/collection names are not resolved, the links are created between methods and unknown bucket/collection objects