gpt4 book ai didi

javascript - CouchDB 更新处理程序 : doc update/insert using Nano

转载 作者:行者123 更新时间:2023-11-30 13:54:59 25 4
gpt4 key购买 nike

我正在 CouchDB 中以下列格式存储一些基于语言环境的数据。

{
"_id": "a62f81b5afad1857c2f6399db500c73b",
"_rev": "3-923e5ed468e0f617f09057035b41051a",
"type": "CAT",
"origin_id": "1",
"locale": "ar",
"values_translation": {
"id": "ar",
"title": ""
}
}

我使用 Nano作为 Node JS 应用程序中的客户端,如果不存在,我需要插入/如果存在,则使用更新处理程序更新文档。为此,我在 couchDB 中创建了以下文档;

  "_id": "_design/handler",
"_rev": "36-d2d08a0a822a762ac07faa4042eca5a0",
"updates": {
"handler": "function(doc, req){
if (doc.type === req.type && doc.origin_id === req.origin_id && doc.locale === req.locale)
{ return [doc, 'OK'];}
else { return [null, 'KO']; }
}"
},
"language": "javascript"
}

但是当我使用以下 Nano 方法运行它时,

translationsDB.atomic("handler", "handler", "_design/handler",
{ type, origin_id, locale, values_translation: value }).then((response) => {
console.log(response);
}).catch(err => {
console.log(err);
});

它总是返回 'OK' 即使我传递了无效数据。对于实际数据,它返回 OK 但不会更新文档。需要弄清楚如何以正确的方式实现这一点(如果文档存在则更新,如果它是新文档则插入)。

最佳答案

当前代码的行为

locale 等自定义字段名称对于 docreq 都是未定义,因为:

  1. doc.customfieldatomic("handler", "handler", "_design/handler" 调用设计文档本身的设计 ( 3rd parameter to atomic要更新的文档)并且您的设计文档自然缺少您放置在示例语言环境文档中的自定义字段。

  2. req.customfield,这些是不存在的 req 字段,atomic 传入的字段在 req.body 中的 JSON 中,如 atomic 文档所示.

如果 undefined === undefined 为真,那么您的检查总是通过这些字段。

然后:

  1. 您无需修改​​文档即可更新设计文档:
{ return [doc, 'OK'];}

因此 couchdb 保存了未更改的设计文档(问题 1),导致只有它的 _rev 继续上升:

{ "_id": "_design/handler", "_rev": "36-...

但这是错误的文档,没有任何字段被更改。

解决这3个问题

  1. 在正确的文档上调用它:

    translationsDB.atomic("处理程序", "处理程序", "a62f81b5afad1857c2f6399db500c73b",

  2. 从 req.body 中提取自定义字段:

       var reqb = JSON.parse(req.body); 
    if (doc.type === reqb.type && doc.origin_id === reqb.origin_id && doc.locale === reqb.locale)
  3. 对返回的文档进行一些修改:

      { return [Object.assign({}, doc, reqb), 'OK'];}    

关于javascript - CouchDB 更新处理程序 : doc update/insert using Nano,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com