如何更新MongoDB中的一对多关系

时间:2015-04-09 01:14:20

标签: mongodb

如果我有一个包含许多地址的Person集合,如何插入属于某个人的多个地址?我知道怎么做,如果它是一对一的关系,我会做一些像:

db.persons.update({_id: '12345'}, {$set: {'address': '12345 fake st'}})

但是,这对于一对多的关系不会起作用,因为每当有人向该人添加地址时,该人的地址就会被替换。有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望某人拥有多个地址,那么您可以将address设为一个数组,然后使用push运算符插入新地址。

db.persons.update(
    { "_id": "12345" }, 
    { "$push": { "address": "12345 fake st"}}
);

您的架构将如下所示:

{
    "_id" : "12345",
    "address" : [
        "12345 fake st",
        "6789 second st",
        ...
    ]
}

当然,您可以根据需要使其变得复杂。因此,如果您需要为每个地址存储额外信息,则可以将子文档插入address数组中。

{
    "_id" : "12345",
    "address" : [
        {
            "number" : "6789",
            "street" : "second st",
            "primary" : false
        },
        {
            "number" : "12345",
            "street" : "fake st",
            "primary" : true
        },
        ...
    ]
}

如评论中所述,如果要确保阵列中没有重复项,则应使用提供该功能的$addToSet运算符。