void Start() { Database.SetLogLevel(LogDomain.All, LogLevel.Verbose); // Get the database (and create it if it doesn't exist) database = new Database(databaseName, new DatabaseConfiguration() { Directory = Path.Combine(Application.persistentDataPath, "CouchBase") }); // Create a new document (i.e. a record) in the database string id = null; using (MutableDocument mutableDoc = new MutableDocument("meta")) { mutableDoc.SetFloat("version", 2.0f) .SetString("type", "SDK"); // Save it to the database database.Save(mutableDoc); id = mutableDoc.Id; } statusLabel.text += "\n- Saved meta doc"; // Update a document using (Document doc = database.GetDocument("meta")) using (MutableDocument mutableDoc = doc.ToMutable()) { mutableDoc.SetFloat("version", 2.0f); database.Save(mutableDoc); using (Document docAgain = database.GetDocument("meta")) { Debug.Log($"Document ID :: {docAgain.Id}"); Debug.Log($"Version {docAgain.GetFloat("version")}"); statusLabel.text += $"\n- Retrieved: {docAgain.Id}"; } } // Create a query to fetch documents of type SDK // i.e. SELECT * FROM database WHERE type = "SDK" using (IWhere query = QueryBuilder.Select(SelectResult.All()) .From(DataSource.Database(database)) .Where(Expression.Property("version").EqualTo(Expression.Float(2.0f)))) { // Run the query IResultSet result = query.Execute(); int count = result.AllResults().Count; Debug.Log($"Number of rows :: {count}"); statusLabel.text += $"\n- Query result: {count}"; } #if UNITY_EDITOR Debug.LogWarning("CouchBase: In Unity Editor – Not replicating!"); return; #endif // Create replicator to push and pull changes to and from the cloud // NOTE: if Continuous is set to true, make sure to stop it and to clean up everything before exiting the application! URLEndpoint targetEndpoint = new URLEndpoint(new Uri(syncUrl)); ReplicatorConfiguration replConfig = new ReplicatorConfiguration(database, targetEndpoint) { // Add authentication Authenticator = new BasicAuthenticator(username, password), ReplicatorType = ReplicatorType.PushAndPull, Continuous = false }; // Create replicator replicator = new Replicator(replConfig); replicator.AddChangeListener((sender, args) => { if (args.Status.Error != null) { Debug.Log($"Error :: {args.Status.Error}"); } else { if (replicator.Status.Activity != ReplicatorActivityLevel.Busy && replicator.Status.Activity != ReplicatorActivityLevel.Connecting) { syncing = false; Debug.Log($"Done syncing: {replicator.Status.Activity}"); doneSyncing = true; } else { Debug.Log($"Progress: {args.Status.Progress.Completed} / {args.Status.Progress.Total}"); } } }); Debug.Log("Starting syncing..."); statusLabel.text += "\n- Starting syncing..."; replicator.Start(); syncing = true; // Later, stop and dispose the replicator *before* closing/disposing the database }