【问题标题】:Realm Delete an Object in One to Many relationship领域在一对多关系中删除对象
【发布时间】:2021-07-21 06:35:10
【问题描述】:

我有一个像这样的 ONE TO MANY 架构:

店铺模式

const Shop = {

  name: "Shop",

  properties: {

      _id: "objectId",
      products:"Products[]"
 }
}

产品架构

const Products = {

  name: "Products",

  properties: {

      _id: "objectId",
      name : "string",
    }
}

一家商店有很多产品,如下图所示

_id:'60f73ca7c1a70278596cc7d0',
products:[
      {_id:1, name:'product1'},
      {_id:2, name: 'product2'},
      {_id:3, name: 'product3'}
]

现在,假设我要删除 product2,我该如何使用 mongodb 领域?

到目前为止我已经尝试过什么

const obj = realm.objects('Shop').filtered("_id == $0 AND products._id == $1", ObjectId('60f73ca7c1a70278596cc7d0'), ObjectId('2'))
realm.write(() => {
   realm.delete(obj)
})

但这不会删除 products 数组中的项目。

如何使用领域删除此一对多关系中产品数组中的特定元素?

【问题讨论】:

  • 为了清楚起见;您想从阵列中移除产品还是完全移除产品?例如从数组中删除它不会删除实际对象。此外,您的过滤器将返回 Shop 对象,而不是产品对象 obj = realm.objects('Shop')。是这个意图吗?如果没有,并且您想删除产品,则需要过滤 Product 对象,或者,一旦您拥有 shop 对象(结果),然后过滤您要删除的产品。
  • @Jay (i) 我想完全删除产品(删除它)。 (ii) 我希望过滤器返回一个产品对象,以便我可以删除所需的产品。 (iii) 你能告诉我如何过滤产品对象的代码,以便我可以删除特定产品吗?
  • 这实际上在文档中有所介绍。首先查询该对象Filter For Object,然后在拥有它后将其删除Delete an Object。如果你想删除product1,你可以查询“product1”或者使用它的ID,如果你知道的话。
  • @Jay 我已经阅读了你指向这里的那些文档,但我仍然无法解决我的问题。你能告诉我如何解决我在问题中解释的问题的工作示例代码吗?

标签: javascript realm mongodb-realm


【解决方案1】:

问题中的代码非常接近正确,您只需过滤要删除的产品而不是商店。不清楚您是否知道产品 _id 或名称,但您可以按任何一个进行过滤。

这是过滤 _id 为 1 的产品的代码,然后将其删除(这也会将其从包含对它的引用的任何列表中删除。

const prod = realm.objects('Products').filtered("_id == 1");
realm.write(() => {
   realm.delete(prod);
   prod == null;
})

以上摘自文档Filter QueryDelete An Object

请记住,这将删除所有 id = 1 的产品,因此只要 _id 是唯一的就可以了。

【讨论】:

  • 完美运行。我通过从父母那里访问孩子来查询“mongodb 方式”是错误的。直接查询 Products 对象。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多