2016-07-27 65 views
0

指数中有我在MongoDB中同样喜欢一个文件:创建子文件

{ 
    "_id":"jery", 
    "pets":{ 
     "rabbit":{ 
      "name":"momo", 
      "age":2 
     }, 
     "dog":{ 
      "name":"lizy", 
      "age":2 
     } 
    } 
} 

这个文件的结构非常容易更新/更新插入,但难度浅析浅析是什么问题,应该怎么做,以创造独特指数在现场"name"

+0

你有试过任何东西吗?你能表现出你的努力吗? – Shrabanee

+0

是的,我这样做。我找不到解决这个问题的办法。如果子文档是在一个数组中,所以我可以为它创建一个唯一索引,但数据结构不是数组。我搜索mongoDB 3.2文档寻求解决方案。我可能会尝试使用$ text来查找我是否在任何文档中具有相同的“名称”。但“文本索引”它只为类型为“字符串”的字段创建 – Keto

+0

让我确定您的要求究竟是什么。如果一个记录中有一个“名字”,它不应该出现在任何其他记录中,而不考虑宠物。这是你想要做的? – Shrabanee

回答

1

为此,您需要做的是这样的: -

db.collection.createIndex({ 
    "pets.rabbit.name": 1,  
    "pets.dog.name": 1 
}) 
+0

但兔子和狗是动态插入字段。这就是说,我不知道我已经有什么像兔子,狗或任何其他宠物在这个collection.whatever宠物有一个名称与“名称”,当我插入宠物相同的“名称”,碰撞发生。 – Keto

+0

是否有任何语法可以实现db.collection.find({“pet。$。name”:“lizy”})。Count() – Keto

2

更改您的文档结构,如下所示: -

{"_id":"jery","pets":[{"type":"rabbit","name":"momo","age":2},{"type":"dog","name":"lizy","age":2}]} 

然后就很容易查询了。

+0

我想过这个,也许是唯一的方法.He .... – Keto

+0

Do我对我的建议有任何意见吗? – Webdev