0

我有一个像这样的一对多模式:

店铺模式

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 数组中的项目。

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

4

1 回答 1

1

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

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

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

以上摘自文档过滤查询删除对象

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

于 2021-07-23T14:04:07.680 回答