Node.js Mongodb:创建嵌入文档-获取Id

Node.js Mongodb:创建嵌入文档-获取Id,node.js,mongodb,mongoose,embedded-documents,Node.js,Mongodb,Mongoose,Embedded Documents,我正在尝试为嵌入式文档实现一个简单的CRUDCreate URL如下所示[POST]/restaurants/:id/subsiders 查询如下所示: const restaurant = await Restaurant.findByIdAndUpdate(req.params.id, { $push: { subsidiaries: { phone, email, title, ... }, }, }) 我使用的是m

我正在尝试为嵌入式文档实现一个简单的CRUD
Create

URL如下所示
[POST]/restaurants/:id/subsiders

查询如下所示:

const restaurant = await Restaurant.findByIdAndUpdate(req.params.id, {
  $push: {
    subsidiaries: {
      phone,
      email,
      title,
      ...
    },
  },
})
我使用的是mongoose,所以它会自动为子数据库创建一个id

现在我想返回新创建的子数据库(包括ID)。 鉴于我的数据中没有任何其他标识符,我如何才能找到新创建的文档


我知道Mongo鼓励嵌入文档,但我找不到关于如何处理典型(我发现这是一个非常典型的情况)REST/CRUD问题的任何信息。

答案可以在mongodb$push modifiers文档中找到

如果没有$position修饰符,$push会将元素附加到数组的末尾

因此,我们知道,添加的元素将是返回的嵌入式文档数组中的最后一个元素

// Question
const restaurant = await Restaurant.findByIdAndUpdate(req.params.id, {
  $push: {
    subsidiaries: {
      phone,
      email,
      title,
      ...
    },
  },
}, { new: true })

// Answer
if (!restaurant) return res.sendStatus(500)

const newlyCreatedSubsidiary = restaurant.subsidiaries.slice(-1)[0]
res.send(newlyCreatedSubsidiary)

别忘了将其包装成一个
try catch
也可以将文档作为第一个子项添加到数组中(最新的第一顺序)

我们可以使用
$position:0
来实现这一点,但它还需要将嵌入的文档放入
$each:[]
数组中

代码如下:

const restaurant = await Restaurant.findByIdAndUpdate(
  req.params.id,
  {
    $push: {
      subsidiaries: {
        $each: [
          {
            phone,
            email,
            title,
            ...
          },
        ],
        $position: 0,
      },
    },
  },
  { new: true }
)

if (!restaurant) return res.sendStatus(500)

const subsidiary = restaurant.subsidiaries[0]
res.send(subsidiary)