【问题标题】:mongoose.watch() fields' name changing by itselfmongoose.watch() 字段的名称自行更改
【发布时间】:2021-02-25 22:17:26
【问题描述】:

我从猫鼬开始,我必须在集合上使用 watch() 方法。 当我想捕捉插入时,没有问题。 然而,当我想检索更新的更改时,我不知道为什么在某些情况下,mongoose 会更改我的字段名称?

 registration.watch(). on('change', data => {
  if(data.operationType == "update") {
    console.log(data.updateDescription.updatedFields);
  }
)};

我的注册集合由可以接受或拒绝邀请的人组成,并且可以更改他们的回答。所以它基本上是从一组数据中删除人,然后放入另一组数据中。

我唯一的问题是我的数组名称有时会“改变”:

{
  __v: 100,
  accepted: [
    {
      _id: 5faa76d048dd6e0017e631d4,
      user: 5faa752848dd6e0017e631d2
    },
    {
      _id: 5faa9ab06048a20017774610,
      user: 5fa8fabc60260ec31606d71e
    },
  ],
  'declined.1': { _id: 5faf037a141f030017863484, user: 5faa74de48dd6e0017e631d0 },

例如,我的字段拒绝更改为“declined.1”,为什么会这样?以及如何避免这种情况?或者至少,在这种情况下我怎样才能得到被拒绝的数组?

【问题讨论】:

    标签: node.js mongodb mongoose watch


    【解决方案1】:

    当您在 MongoDB 中更新文档时,它只会将增量写入操作日志,这是 watch 函数从中提取的内容。

    点符号declined.1 表示被拒绝数组的索引1。您提供的更改文档应将新对象推送到 declined 数组中。本质上,它通过不重复所有未更改的数组元素来节省空间。

    如果您需要检索整个文档,可以将fullDocument 设置为updateLookup。见http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#watch

    【讨论】:

    • 感谢您的回复!听起来很有趣,我真的不需要整个文档,所以 mongoose 的默认操作对我来说似乎很好。如果我不将 fullDocument 更改为 updateLoopkup,我如何才能直接访问被添加到拒绝的元素?因为当我拒绝.1 时,“data.updateDescription.updatedFields.declined”是未定义的。能给我举个例子吗?
    • 字段名将是declined.1,所以可能是data.updateDescription.updatedFields["declined.1"]
    • 或者如果你不知道索引,你可以迭代updatedFields的Object.keys,匹配/declined/来查找键名。
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多