Node.js Mongodb:创建嵌入文档-获取Id
我正在尝试为嵌入式文档实现一个简单的CRUDNode.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
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)