【问题标题】:insert document in array field在数组字段中插入文档
【发布时间】:2016-06-05 06:35:29
【问题描述】:

我不擅长mongodb,所以很难操作子文档。我想做的是像这样实现通讯录:

{
    [user1@mail.com]: [
        {
            email: 'aaa@example.com',
            createdAt: '0000-00-00',
            updatedAt: '0000-00-00'
        }
    ],
    [user@mail.com]: [
        { ... },
        { ... }
    ]
}

我将该集合称为“地址簿”,每个项目都是数组类型,包含电子邮件、图像、创建日期等地址信息。

问题是我不知道该怎么做。看起来我需要使用一些运算符,如 $addToSet 或 $push,但我不知道如何正确使用它们。我尝试了什么:

update({
    email: 'user1@mail.com'
}, {
    $push: {
        'address.$email': {
            email: target,
            createdAt: new Date(),
            updatedAt: new Date()
        }
    }
})

我知道的一件事是使用 upsert 选项来更新集合,如果它不存在,则会生成新文档,但仍然没有创建文档。非常感谢您的帮助。

【问题讨论】:

  • 所以你想将数据推送到 mongoDB 对吗?
  • 您可能很难像这样将文档嵌套得这么深。 Mongo 在更新深度嵌套的文档时遇到了问题。
  • 您在正确的轨道上,您可以使用$push$pull 在现有文档中添加或删除内容。
  • 哦,谢谢。我忘了告诉这是 mongodb。
  • 请显示有效的 BSON 文档而不是 pseudo-document

标签: javascript node.js mongodb


【解决方案1】:

看起来呈现的结构会将所有用户数据保存在一个文档中。这在以后的处理中可能会非常棘手,因为 bson 文档有 16MB 的容量限制。

如果您可以考虑更简单的文档形式:

{
   _id:bsonId,       
   email: 'aaa@example.com',
   createdAt: '0000-00-00',
   updatedAt: '0000-00-00',
   name: "unknown"
 }

然后更新和维护您的收藏会容易得多。

db.addressbook.update({ email: 'aaa@example.com'},{name:"Happy User"})

【讨论】:

  • 哦...我忘了限制每个文件。我应该试试。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2015-09-26
  • 2016-12-09
相关资源
最近更新 更多