When I’m at a user group or conference, people often come up to me afterwards with good questions. This is a great way for me to get blog post ideas: if they have a question, chances are lots of other people have the same one. It’s also a great way for me to get to know Couchbase better.
This post is for one of those questions: can I copy documents from one bucket to another?
Copy from bucket to bucket
Yes! In fact, if you’ve done this sort of thing in SQL, then you are not too far from already knowing the answer.
There are command line tools to backup/restore a bucket, but for this post, I’m going to assume that what you want is to make a copy of some documents from bucket A into bucket B.
It’s as easy as using a N1QL INSERT.
Start by creating a N1QL
to get the documents you want out of the first bucket. I’m going to show a very simplified SELECT
that gets all the documents from my SELECT
bucket. If you only want a subset, you can use a default
clause.WHERE
1 2 |
SELECT META().id _k, _v from `default` _v |
Since we’re copying to another bucket, we need both the key and the document itself. This query selects the document key using the
function, and selects the document using a META()
alias._v
Next, I’ll create an
to put these selected documents into another bucket, which I called INSERT
.target
1 2 3 |
INSERT INTO `target` (KEY _k, VALUE _v) SELECT META().id _k, _v from `default` _v |
An
needs a key and a value. I have those from the INSERT
. All done.SELECT
More information about N1QL INSERT
The link:N1QL INSERT is very powerful, and there are a lot of other things you can do with it:
- Insert a single document
- Bulk inserts
- Insert values using
(which is similar to what we did in this post)SELECT
- Insert value with a combination key, using a projection
- Insert values using subqueries
- Insert values using N1QL functions
- Using prepared
queriesINSERT
Note that typical caveats apply: make sure you have good indexing when you are writing the SELECT. If you are copying a lot of documents, you may want to temporarily adjust the timeout. Documents in a bucket must all have a unique key. There is no rollback when inserting multiple documents: if an
fails on the 10th document out of 100, the first 9 documents are still inserted.INSERT
For more in-depth answers about N1QL, check out the Couchbase N1QL Forum.
Follow me on Twitter if you have any questions: your question might become my next blog post!