如何根据特定ID将新项目插入mLab阵列

问题描述 投票:0回答:1

我将mLab用于数据库。我有一个列表集合,每个列表都有一个带有_id,userId和项目数组的对象。

现在我想将新项目添加到特定列表的数组。

连接到Mongo的函数具有新的项目对象和列表ID。

如何找到正确的列表并将新项目添加到项目数组?

每个列表的JSON看起来像这样:

{
    "_id": {
        "$oid": "5ded5eb7e7179a3015b0672f"
    },
    "userID": "1234",
    "items": [
        {
            "_id": "abc12345",
            "name": "abc",
        },
        {
            "_id": "abc12346",
            "name": "def",
        }
    ]
}

和连接到Mongo的功能看起来像这样:

function addItem({item, listId}) {
    return MongoService.connect()
    .then(db => {
        const collection = db.collection('lists');
        //need to do something here
    })
}
javascript mongodb mlab
1个回答
0
投票

我通常会找到Ramda和/或partial.lenses之类的库来解决这样的问题。这些库中的任何一个都将简化处理通常来自mongodb的复杂和/或嵌套数据的工作。

partial.lenses可能是更强大的选项,但是我不确定如何在此处将其嵌入到代码段中,因此这是使用Ramda的示例:

const lists = [
  {
    _id: { $oid: '1234' },
    items: []
  },
  {
    _id: { $oid: '2345' },
    items: []
  },
  {
    _id: { $oid: '3456' },
    items: []
  }
]

function addItem({item, listId}) {
  const ix = lists.findIndex(
    ({ _id }) => _id.$oid === listId
  )
  return R.over(R.lensPath([ix, 'items']), R.append(item), lists)
}

console.log(
  addItem({ item: 'hi', listId: '1234' })
)

console.log(
  addItem({ item: 'hi', listId: '3456' })
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.