如何使用mongoose添加一个字段为空对象的文档?

fnvucqvd  于 5个月前  发布在  Go
关注(0)|答案(2)|浏览(58)

这是我的schema:

const wlb_schema = new mongoose.Schema({
  wlbId: Number,
  wlbName: String,
  color: String,
  coordinates: Object,
  boardId: []
})

字符串
我想使用这个模式添加一个文档,其中坐标将是一个空对象。我试着这样做:

const wlb = new WLB({
    wlbId: req.body.wlbId,
    wlbName: req.body.wlbName,
    color: req.body.color,
    coordinates: {},
    boardId: req.body.boardId
  })
  wlb.save()


它根本没有创建坐标键。所以我问AI,它告诉我忽略坐标:

const wlb = new WLB({
    wlbId: req.body.wlbId,
    wlbName: req.body.wlbName,
    color: req.body.color,
    boardId: req.body.boardId
  })
  wlb.save()


它也根本没有创建坐标键。
我现在使用一个解决方案:

const wlb = new WLB({
    wlbId: req.body.wlbId,
    wlbName: req.body.wlbName,
    color: req.body.color,
    coordinates: {
      something: "i needed to insert this here"
    },
    boardId: req.body.boardId
  })
  wlb.save()


有没有一种方法可以将坐标创建为空对象?或者我需要使用这种愚蠢的解决方法?

nhhxz33t

nhhxz33t1#

默认情况下,Mongo不会保存空对象。这样做是为了保存存储空间。您可以使用minimize覆盖此行为。

const wlb_schema = new mongoose.Schema({
  wlbId: Number,
  wlbName: String,
  color: String,
  coordinates: Object,
  boardId: []
}, { minimize: false })

字符串

sbtkgmzw

sbtkgmzw2#

正如@Tushar Shahi已经说过的,{ minimize: false }将允许你保存空对象。
但是,如果你在coordinates属性中添加了一个default,你可以在第一次创建文档时忽略这个属性,然后插入空的对象。这对阅读你的模式的人来说更语义化,即你打算通过编译器保存一个空的对象,这不是一个编码错误。它看起来是这样的:

const wlb_schema = new mongoose.Schema({
    wlbId: Number,
    wlbName: String,
    color: String,
    coordinates: {
        type: Object,
        default: {} // <Add default empty object
    },
    boardId: []
},{minimize: false}); //< Add this options object

字符串
当你创造的时候,

const wlb = new WLB({
    wlbId: req.body.wlbId,
    wlbName: req.body.wlbName,
    color: req.body.color,
    //< You can omit the coordinates so that the default empty object is inserted
    boardId: req.body.boardId
})
await wlb.save()

相关问题