Javascript 如何从Sails/Waterline中的数据库中删除属性

Javascript 如何从Sails/Waterline中的数据库中删除属性,javascript,sails.js,waterline,Javascript,Sails.js,Waterline,(编辑以澄清当从对象中删除属性时,我希望从数据库中删除/删除该属性) 我有一个小型的Sails应用程序,它具有一个无模式的模型,允许将属性添加并保存到数据库中(目前仅用于测试目的的Sails磁盘文件系统适配器) 我遇到的问题是,我无法找到从数据库中永久删除属性的方法 当我删除作为模型实例的对象上的属性时,我还希望从数据库中删除该属性。当我移动到像MongoDB这样的对象数据库并拥有具有动态创建属性的对象时,这将非常有用 使用delete object[attributeName]删除属性,然后使

(编辑以澄清当从对象中删除属性时,我希望从数据库中删除/删除该属性)

我有一个小型的Sails应用程序,它具有一个无模式的模型,允许将属性添加并保存到数据库中(目前仅用于测试目的的
Sails磁盘
文件系统适配器)

我遇到的问题是,我无法找到从数据库中永久删除属性的方法

当我删除作为模型实例的对象上的属性时,我还希望从数据库中删除该属性。当我移动到像MongoDB这样的对象数据库并拥有具有动态创建属性的对象时,这将非常有用

使用
delete object[attributeName]
删除属性,然后使用实例方法
object.save()
保存属性不起作用,删除的属性仍然保留

例如,如果我有此对象:

{
  "name": "Chair",
  "colour": "white"
}
假设我要删除
颜色
属性,以将其替换为
材质
属性,如下所示:

{
  "name": "Chair",
  "material": "pine"
}
更新数据库中的对象后,会添加新的
材质
属性,但不会删除已删除的
颜色
属性。 因此,数据库中的最终结果将是:

{
  "name": "Chair",
  "colour": "white",
  "material": "pine"
}
所以这不是我想要的结果


有没有一种方法可以使用Sails/Waterline从数据库中的对象中永久删除/删除属性?

我确信现在已经太迟了,但我也遇到了同样的问题。我所做的只是创建一个新对象并删除旧对象。如果您想以编程方式执行此操作,只需比较当前对象和旧对象的键即可。问题是,您还必须使用新id更新所有相关模型(和集合)。

我确信现在进行更新为时已晚,但我遇到了同样的问题。我所做的只是创建一个新对象并删除旧对象。如果您想以编程方式执行此操作,只需比较当前对象和旧对象的键即可。问题是,您还必须使用新id更新所有相关模型(和集合)。

默认情况下,无法“取消设置”属性,因为结构化SQL数据库不能以这种方式工作。您可以将该属性设置为NULL,这是使用直帆所能做的最多的操作。在MySql、MSSQL、Oracle、PGSQL等结构化数据库中,当您不提供属性时,数据库将插入默认值(NULL或模式定义规定的其他值)或向您抛出错误

对于像Mongo这样的NoSQL DB,它们确实有一个“unset”选项,Sails不支持开箱即用。在Sails中,您必须使用Sails.model[“name”].getDatastore().manager执行本机查询,然后使用$unset运行本机Mongo更新查询以删除该属性

const db = sails.model["products"].getDatastore().manager;
await db.collection("products").update(
       { sku: "unknown" },
       { $unset: { quantity: "", instock: "" } });
**updateMany也可以同样的方式同时用于多个记录

参考:

否则,如前所述,文档替换(cringe)是唯一的替代方法。

默认情况下不能“取消设置”属性,因为结构化SQL数据库不能以这种方式工作。您可以将该属性设置为NULL,这是使用直帆所能做的最多的操作。在MySql、MSSQL、Oracle、PGSQL等结构化数据库中,当您不提供属性时,数据库将插入默认值(NULL或模式定义规定的其他值)或向您抛出错误

对于像Mongo这样的NoSQL DB,它们确实有一个“unset”选项,Sails不支持开箱即用。在Sails中,您必须使用Sails.model[“name”].getDatastore().manager执行本机查询,然后使用$unset运行本机Mongo更新查询以删除该属性

const db = sails.model["products"].getDatastore().manager;
await db.collection("products").update(
       { sku: "unknown" },
       { $unset: { quantity: "", instock: "" } });
**updateMany也可以同样的方式同时用于多个记录

参考:


否则,如前所述,文档替换(cringe)是唯一的替代方案。

这是相对的:但我认为您试图做的是不可能的,但是我确实模糊地记得在v1文档中看到了一些关于这一点的可能,但现在找不到,所以不要相信我的话。我还认为您最好修改您的模型,以便每个项目都有不同的关联选项。看这里:也可以看这里:谢谢@CraigvanTonder,不幸的是你的链接没有提供任何额外的线索。也许你是对的,我所希望的是不可能的(我编辑了原始问题以澄清其意图-之前可能有点含糊不清…似乎我认为您试图修改models属性值时偏离了正题,正如我试图指出的,这目前是有问题的。因此,好吧,您有一个JSON对象,您必须将其保存在sails磁盘中?那么w使用Sails并使用具有包含JSON的属性值的模型。请参阅此处了解更多信息:-这样您就可以使用水线功能()创建/阅读/更新/删除?这是相对的:但我认为你试图做的是不可能的,但是我确实模糊地记得在v1文档中看到了一些关于这一点的东西,但现在找不到,所以不要相信我的话。我也认为你最好修改你的模型,使每个项目都有v各种相关选项。请看这里:也可以看这里:谢谢@CraigvanTonder,不幸的是,您的链接没有提供任何额外的线索。也许您是对的,我所希望的是不可能的(我编辑了原始问题以澄清其意图-之前可能有点含糊不清…似乎我认为您试图修改models属性值时偏离了正题,正如我试图指出的,这目前是有问题的。因此,好吧,您有一个JSON对象,您必须将其保存在sails磁盘中?那么w使用Sails并使用一个具有包含JSON的属性值的模型。请参阅此处了解更多信息:-这样您就可以使用水线游戏了