Sequelize - 如何仅返回数据库结果的 JSON 对象?

2024-01-05

所以我想要返回数据库结果而不是其他。目前我正在返回一大块 JSON 数据(如下所示):

但我只需要 [dataValues] 属性。我不想使用这一点JSON检索它:tagData[0].dataValues.tagId.

我刚刚注意到:当它发现并且不创造,它将返回JSON对于数据库结果,但是当它没有找到并创建,它返回不需要的 JSON blob(如下所示)有没有办法解决这个问题?

[ { dataValues:
     { tagId: 1,
       tagName: '#hash',
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },
    _previousDataValues:
     { tagId: 1,
       tagName: '#hash',
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },
    _changed:
     { tagId: false,
       tagName: false,
       createdAt: false,
       updatedAt: false },
    '$modelOptions':
     { timestamps: true,
       instanceMethods: {},
       classMethods: {},
       validate: {},
       freezeTableName: true,
       underscored: false,
       underscoredAll: false,
       paranoid: false,
       whereCollection: [Object],
       schema: null,
       schemaDelimiter: '',
       defaultScope: null,
       scopes: [],
       hooks: {},
       indexes: [],
       name: [Object],
       omitNull: false,
       sequelize: [Object],
       uniqueKeys: [Object],
       hasPrimaryKeys: true },
    '$options':
     { isNewRecord: true,
       '$schema': null,
       '$schemaDelimiter': '',
       attributes: undefined,
       include: undefined,
       raw: true,
       silent: undefined },
    hasPrimaryKeys: true,
    __eagerlyLoadedAssociations: [],
    isNewRecord: false },
  true ]

我不需要像上面那样得到大斑点,而是只需要RAWjson 结果(如下所示):

{ tagId: 1,
       tagName: '#hash',
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },

我使用了以下 JavaScript。我确实尝试添加raw: true,但没有成功?

    // Find or create new tag (hashtag), then insert it into DB with photoId relation
module.exports = function(tag, photoId) {
    tags.findOrCreate( { 
        where: { tagName: tag },
        raw: true
    })
    .then(function(tagData){
        // console.log("----------------> ", tagData[0].dataValues.tagId);
        console.log(tagData);
        tagsRelation.create({ tagId: tagData[0].dataValues.tagId, photoId: photoId })
        .then(function(hashtag){
            // console.log("\nHashtag has been inserted into DB: ", hashtag);
        }).catch(function(err){
            console.log("\nError inserting tags and relation: ", err);
        });
    }).catch(function(err){
        if(err){
            console.log(err);
        }
    });

}

Edit:

所以我调查了一下,看来大JSON仅当以下情况时才返回 blobSequelize是创造而不是发现。

有没有办法解决这个问题?

Edit 2:

好吧,我找到了一个解决方法,可以将其变成可重用的函数。但如果有一些内置的东西Sequelize,我更愿意使用它。

var tagId = "";

// Extract tagId from json blob
if(tagData[0].hasOwnProperty('dataValues')){
    console.log("1");
    tagId = tagData[0].dataValues.tagId;
} else {
    console.log("2");
    console.log(tagData);
    tagId = tagData[0].tagId;
}

console.log(tagId);
tagsRelation.create({ tagId: tagId, photoId: photoId })

Edit 3:

因此,我认为没有“官方”续集方法可以实现此目的,因此我只是编写了一个自定义模块,该模块返回JSON所需的数据。该模块可以定制和扩展以适应各种情况!如果有人对如何改进该模块有任何建议,请随时发表评论:)

在此模块中,我们返回一个 Javascript 对象。如果你想把它变成JSON只需使用它进行字符串化JSON.stringify(data).

// Pass in your sequelize JSON object
module.exports = function(json){ 
    var returnedJson = []; // This will be the object we return
    json = JSON.parse(json);


    // Extract the JSON we need 
    if(json[0].hasOwnProperty('dataValues')){
        console.log("HI: " + json[0].dataValues);
        returnedJson = json[0].dataValues; // This must be an INSERT...so dig deeper into the JSON object
    } else {
        console.log(json[0]);
        returnedJson = json[0]; // This is a find...so the JSON exists here
    }

    return returnedJson; // Finally return the json object so it can be used
}

Edit 4:

于是就有了官方的sequelize方法。请参阅下面已接受的答案。


尽管记录很少,但 Sequelize 中确实存在这种情况。

情侣方式:

1.对于任何回应object查询结果,您可以通过附加来仅提取所需的数据.get({plain:true})响应如下:

Item.findOrCreate({...})
      .spread(function(item, created) {
        console.log(item.get({
          plain: true
        })) // logs only the item data, if it was found or created

还要确保您正在使用spread您的动态查询承诺类型的回调函数。请注意,您可以访问布尔响应,created,表示是否执行了创建查询。

2.Sequelize 提供了raw选项。只需添加选项即可{raw:true}并且您只会收到原始结果。这将适用于一系列结果,第一种方法不应该,因为get不会是数组的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sequelize - 如何仅返回数据库结果的 JSON 对象? 的相关文章

随机推荐

  • 具有公共 getter 和私有 setter 的 Python 属性

    我有一个像这样的 python 属性 class Foo property def maxInputs self return self persistentMaxInputs value maxInputs setter def maxI
  • 如何使用 Google 日历 v3 访问其他用户的日历?

    我正在使用 Google Calendar v3 API 和 google apps 并且希望使用单个 oauth2 凭据来确定哪些用户在任何给定点有空 忙碌 我想用这个 https developers google com google
  • Javascript模拟在输入框中按Enter键

    我似乎对一个问题有一个简单的解决方案 但在网上尝试了大量不同的解决方案后 似乎没有什么对我有用 我有一个搜索字段 每次您在输入字段中键入或按 Enter 键时都会搜索数据表 但是在加载页面时为搜索框分配一个值后 它不会执行搜索 直到用户在输
  • 为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage?

    这是完整的代码 public class CrawlServlet implements Filter public static String getFullURL HttpServletRequest request StringBuf
  • 高效的 XMPP 用户搜索

    我想有效地检查所有本地地址簿联系人 如果他们有 jabber 帐户 用户使用手机号码在XMPP服务器上注册 我当前将以下 XEP 0055 节发送到 ejabberd 服务器并评估结果
  • 容器之间的连接被拒绝

    我尝试将运行 spring boot 2 应用程序的容器链接到运行 mongo 的容器 但连接被拒绝 docker compose 文件有一个 mongo 容器 稍后也会在此处添加另一个用于 spring boot 的容器 version
  • 如何识别这些图像中字母的颜色?

    我在用本文 https code msdn microsoft com windowsdesktop Solving Captcha with C dadf37cd解决验证码问题 它的工作原理是使用 AForge 从图像中删除背景 然后将
  • 如何在 JavaScript 中创建 url 预览?

    有人可以帮助我在 JavaScript 中创建 url 预览吗 我的意思是这样的 假设我的网站上有一个链接 我希望用户能够将鼠标悬停在该链接上 并弹出一个图像 显示链接目标的外观 不用担心 CSS 我已经可以正常工作了 我只需要实际的脚本来
  • 为什么我的 C# 程序在分析器中速度更快?

    我有一个相对较大的系统 到目前为止约 25000 行 用于监视无线电相关设备 它使用最新版本的 ZedGraph 显示图表等 该程序是在Win7下的VS2010上使用C 编写的 问题是 当我从 VS 中运行该程序时 它运行缓慢 当我从构建的
  • Excel VBA 查询访问失败

    我正在尝试使用 VBA 从 excel 查询访问文件 但出现错误rs Open queryStatement conn adOpenStatic adLockOptimistic 错误是 运行时错误 2147217904 80040e10
  • Visual Studio 2012 上的 vc++ 项目缺少 mfc110ud.dll

    我使用VS 2012 IDE在vc 中编写了一个vc 项目 它在我的系统中运行良好 当我尝试在其他系统 其中没有 VS2012 上运行时 我们收到 MFC110ud dll 丢失 错误 第一张图片 我尝试手动放置该 dll 但它说非法使用
  • 将函数添加到枚举

    是否可以在 TypeScript 中向 Enum 类型添加函数 例如 enum Mode landscape portrait the dream toString console log this Or class ModeExtensi
  • Lambda 表达式用于访问一个对象的属性,该属性是 C# 中另一个对象的属性

    我有这两门课 public class Contratos public int EntidadeFinanceiraId get set Column Nome public EntidadesFinanceiras entidadeFi
  • ITL(iTunes 库)格式

    我正在开发一个用于管理 iTunes 库 ITL 文件 的 Java 解决方案 ITL 格式是一种专有格式 我正在寻找有关 ITL 格式的实现或文档 但 Google 找不到任何有用的东西 有人有这方面的经验吗 在哪里可以找到更多信息 提前
  • jquery 有等价的 dojo.hitch() 吗?

    原谅我的无知 因为我对 jquery 不太熟悉 有没有相当于道场 hitch http dojotoolkit org reference guide 1 7 dojo hitch html 它返回一个保证在给定范围内执行的函数 编辑 根据
  • ReactJS:如何从另一个组件更新组件

    我正在尝试写一个简单的textarea字符计数器小部件ReactJS http facebook github io react 学习如何使用它 但我现在知道如何通过火来设定价值textarea onChange event 这就是我编写应
  • jQuery 获取选择选项的名称

    我有一个包含多个选项的下拉列表 每个选项都有一个名称属性 当我选择一个选项时 需要出现不同的复选框列表 当选择另一个选项时 该复选框列表应该消失并显示另一个复选框 我创建了这些复选框列表 并为它们提供了一个与所选选项的名称属性相关的 ID
  • 获取“[object HTMLDivElement]”而不是其内容?

    我只想创建原始副本divs 位于一个带有一个案例的新 div 中 Case 1 复制那些具有favouriteid 的新 div 内的类fav items 我已经尝试过 我都尝试过innerHTML and appendChild 方法 当
  • 如何将多个jar添加到groovyConole/groovysh的类路径中?

    我不得不问这个问题 这感觉很荒谬 但我似乎无法将多个 jar 文件添加到 groovyConsole 和 groovysh 的类路径中 如何将多个 jar 文件添加到类路径 这是我尝试过的 groovyConsole cp lib comp
  • Sequelize - 如何仅返回数据库结果的 JSON 对象?

    所以我想要返回数据库结果而不是其他 目前我正在返回一大块 JSON 数据 如下所示 但我只需要 dataValues 属性 我不想使用这一点JSON检索它 tagData 0 dataValues tagId 我刚刚注意到 当它发现并且不创