如何为MongoDB的嵌入式文档中的数组索引命名

时间:2015-11-29 23:53:12

标签: mongodb nosql

我有一份关于公司员工的文件,每个员工都有多个地址。这是一个嵌入式文档

    { 
       "_id" : 13,
       "emp_name" : "Joy Pett",
       "emp_gender" : "Male",
       "emp_address" : [
        {
            "street" : "123 Fake Street",
            "city" : "Faketon",
            "state" : "MA"
            },
        {
            "street" : "1 Some Other Street",
            "city" : "Boston",
            "state" : "MA"
        }
]}

这是我在RoboMongo中运行查询时输出的快照

enter image description here

它将数据插入到文档中,地址存储在嵌入式数组中。我想为员工的每个地址指定一个特定的名称。例如,Address1,Address2等。默认情况下,Mongodb为数组的每个索引提供一个数值,如0,1,2 ......如何为地址数组的每个索引指定一个特定的名称?

1 个答案:

答案 0 :(得分:2)

您无法将索引命名为数组。在你的情况下,你可以通过两种方法。两者都需要更改数据库架构。在某种程度上,您可以将emp_address定义为:

"emp_address": 
{
   "address1": 
   {
      "street" : "123 Fake Street",
      "city" : "Faketon",
      "state" : "MA"
   },
   "address2":
   {
      "street" : "1 Some Other Street",
      "city" : "Boston",
      "state" : "MA
   }
}

..等等。在这种情况下,您可以访问"emp_address.address.street"等元素。

另一种方法非常简单,我建议使用这种方法。在这种情况下,您可以在emp_address数组中添加一个名为address_type的键。样本如下所示:

"emp_address" : [
    {
        "address_type": 1,
        "street" : "123 Fake Street",
        "city" : "Faketon",
        "state" : "MA"
    },
    {
        "address_type": 2
        "street" : "1 Some Other Street",
        "city" : "Boston",
        "state" : "MA"
    }
]

要访问员工的地址1,您可以提供以下查询:

  

db.employee.find({" _id":13," emp_address.address_type":1},{" emp_address。$":1} )