簡體   English   中英

如何使用Couchbase和Node.js SDK在存儲桶中執行更新和刪除操作

[英]How to perform Update and Delete operations in a bucket using Couchbase and Nodejs sdk

我正在使用Node.js從mongodb遷移到Couchbase。 我想執行CRUD操作。 Insert(create)Get可以正常工作,但是當我要執行UpdateDelete時,會收到一些錯誤消息(此處使用'upsert','replace'進行更新)是這樣的:

TypeError:無法讀取未定義的屬性“替換”

這是代碼:

db.js

// Instantiate Couchbase and Ottoman
var couchbase=require('couchbase');
var ottoman=require('ottoman');
// Build my cluster object and open a new cluster
var myCluster = new couchbase.Cluster('localhost:8091');
var myBucket = myCluster.openBucket('default');
ottoman.bucket=myBucket;
require('./model/user');
ottoman.ensureIndices(function(){});

user.js

var db = require('./../db.js').myBucket;
var ottoman = require('ottoman');

var userMdl = ottoman.model('User', {
    firstName: {type:'string'},
    lastName: {type:'string'},
    created: {type: 'Date', default:function(){return new Date()}},
    email:'string',
    phone: 'string'
},{
    index: {
        findByID: {   
            by: '_id'
        },
    }

})  
module.exports = userMdl;

routes.js

 var bodyParser = require('body-parser');
    var db = require('../schema/db').myBucket;
    var user=require('../schema/model/user');
    var jsonParser = bodyParser.json();
    var urlencodedParser = bodyParser.urlencoded({ extended: false });

    module.exports = function (app) {
    // Delete a record
    app.post("/api/delete/:_id", function(req, res) {
        console.log("_id:"+req.params._id)
        if(!req.params._id) {
            return res.status(400).send({"status": "error", "message": "A document id is required"});
        }
        db.delete({_id:req.params._id}, function(error, result) {
            if(error) {
                return res.status(400).send(error);
            }
            res.send(result);
        });
    });

    app.post('/api/user/update/:id',function(req,res){
       db.replace(req.params.id,{firstName:"Mahesh"},function(err,result){
         if (err) {
            res.status = 400;
            res.send(err);
            return;
         }
         else {
           res.status = 202;
           res.send(result);  
          }
        })
      })
    }

最近兩天我一直被困在這里。

您錯過了一個參數,盡管它可以是可選的。
Couchbase Node.js SDK文檔中 ,它有4個參數,但只有3個。

db.replace(req.params.id,{firstName:"Mahesh"},function(err,result){
=>
db.replace(req.params.id,{firstName:"Mahesh"}, {}, function(err,result){

使用空映射的第3個參數可能會正常工作,但是請注意Couchbase使用開放式鎖定 ,因此在修改原始文檔以獲取數據完整性時,需要原始文檔的“ CAS”值。

db.js中的行var ottoman = require('ottoman'); 它本身就是一個構造函數。 然后,您有兩個實例,當您嘗試定義模型時,錯誤出現在user.js中,因為node-ottoman需要對存儲桶的引用。

您應該在user.js中分配存儲桶,或重新使用在db.js中留下的奧斯曼對象

model.js

    // Instantiate Couchbase and Ottoman

    var couchbase = require('couchbase');
    var ottoman = require('ottoman');

    // Build my cluster object and open a new cluster
    var myCluster = new couchbase.Cluster('localhost:8091');
    var myBucket = myCluster.openBucket('default');
    ottoman.bucket = myBucket;

    var userMdl = ottoman.model('User', {
        firstName: {type:'string'},
        lastName: {type:'string'},
        created: {type: 'Date', default:function(){return new Date()}},
        email:'string',
        phone: 'string'
    },{
        index: {
            findByID: {   
                by: '_id'
            },
        }

    }) ;

    // this line needs to be after you define the model
    ottoman.ensureIndices(function(){});

    module.exports = userMdl;
    model.exports = mybucket;

您可以使用兩種方法更新Couchbase文檔,第一種是upsert方法,第二種是N1qlQuery

bucket.upsert('user', {'name': 'Jay'}, {'expiry': 1}, function(err){
    bucket.get('user', function(err, result) {
        console.log('Have item: %j', result.value);
    })
});

let query = N1qlQuery.fromString("UPDATE `"+BUCKETNAME+"` SET name='"+data.name+"'  where _id ='"+id+"'");
bucket.query(query,(error,result)=>{
    if(error){
        console.log(error);
    }
    console.log(result);
});

您可以使用2種方式刪除Couchbase文檔,第一種是通過N1qlQuery removed方法,第二種是通過N1qlQuery

bucket.remove(id, function(error, result) {
    console.log("Deleted");
});

let query = N1qlQuery.fromString("DELETE FROM `"+BUCKETNAME+"` WHERE _id = '"+id+"'");
bucket.query(query,(error,result)=>{
    if(error){
        console.log(error);
    }
    console.log(result);
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM