如果我有一个包含许多地址的Person集合,如何插入属于某个人的多个地址?我知道怎么做,如果它是一对一的关系,我会做一些像:
db.persons.update({_id: '12345'}, {$set: {'address': '12345 fake st'}})
但是,这对于一对多的关系不会起作用,因为每当有人向该人添加地址时,该人的地址就会被替换。有人可以帮忙吗?提前谢谢。
答案 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
运算符。