Невозможно использовать mutateIn с пакетом SDK узла Couchbase.

Я пытаюсь реализовать этот бит кода:

bucket.mutate_in('some_doc',
                  SD.array_append('some.array', 'Hello', 'World',
                                  create_parents=True))

Что я получаю отсюда: https://developer.couchbase.com/documentation/server/current/sdk/subdocument-operations.html

Я также использую это: https://github.com/couchbase/couchnode

Я не могу импортировать «вложенный документ» из Couchbase, потому что я получаю сообщение об ошибке, говорящее, что его не существует, и когда я пытаюсь использовать метод mutateIn (или метод mutate_in), я также получаю сообщение об ошибке, говорящее, что mutateIn не является свойством Bucket (каким он должен быть).

Я хотел бы добавить элемент в массив (или создать массив, если он не существует, а затем добавить в него элемент) для одного из моих документов в моей корзине на диване.


person Attila    schedule 30.06.2017    source источник


Ответы (2)


Вероятно, у вас не установлена ​​достаточно новая версия. Согласно примечаниям к выпуску, поддержка поддокументов был GA в версии 2.3.0, а в более ранних версиях он был добавлен как незафиксированный.

Что ваша команда package.json или npm list говорит о вашей версии?

person Matt Ingenthron    schedule 30.06.2017
comment
В моем файле package.json: в devDependencies у меня есть "@types/couchbase": "^2.1.30", но в зависимостях у меня есть "couchbase": "^2.3.4" - person Attila; 04.07.2017

Документация не кажется самой простой для навигации (и примеры на странице поддокумента написаны на Python, к которому вы можете перейти из раздела узла, не осознавая этого!) — у меня была та же проблема, проверьте: https://developer.couchbase.com/documentation/server/4.6/sdk/nodejs/document-operations.html

Пытаться

import couchbase from 'couchbase';

let cluster = new couchbase.Cluster(config.couchbase.clusterIp);
let couchbaseBucket = cluster.openBucket(config.couchbase.bucket);

couchbaseBucket
  .mutateIn(documentId)
  .arrayAppend('key', value)
  .execute(function(err, fragment){

    if (!err || err.code == couchbase.errors.checkResults) {
        try {
          fragment.contentByIndex(0);
        } catch (e) {
          console.error('Error for index %d: %s', 0, e.message);
        }
    } else {
      console.error('Top-level document error: %j', err);
    }

  });
person Sam Taylor    schedule 22.03.2018