MongoDB匹配对象的数组/数组中的值

时间:2017-11-19 11:18:58

标签: mongodb

我正在开发一个项目,因为我是MongoDB的新手,我有一个关于查询数据库的问题。我想像这样查询数据库

db.getCollection('achievmenets2').find("id":20)

如果存在20的id并且返回对象

,它将搜索整个文档

这是数据库的外观

 -Achievement Category
    - id
    - Achievements_Array(Contains achievements with the ID that im gonna search for)
 -Achievement Category2
    - id
    - Achievements_Array(Contains achievements with the ID that im gonna search for)

感谢您的回答

1 个答案:

答案 0 :(得分:0)

假设您有一个包含以下数据的集合测试。

<强>测试

{
  "_id" : ObjectId("5a1172f17780777507a9be7a"),
  "name" : "Rob",
  "friends" : [ 
    "Jamie", 
    "Avisha"
  ]
}
{
  "_id" : ObjectId("5a1172f17780777507a9be7c"),
  "name" : "Kim",
  "friends" : [ 
    "Jose", 
    "Avisha"
  ]
}

您必须查询集合以获取在friends数组中具有“Avisha”的结果。为此,您可以使用mongoDB的$in运算符。

查询看起来像

db.getCollection('test').find({friends: {$in: ['Avisha']}})

它会给你2个结果。同样,您可以将“test”替换为您的收藏名称,将“friends”替换为您的成就数组,将“Avisha”替换为您要搜索的ID。

假设friends数组包含对象,例如

{
  "_id" : ObjectId("5a1172f17780777507a9be7a"),
  "name" : "Rob",
  "friends" : [ 
    {"name": "Jamie"}, 
    {"name": "Avisha"}
  ]
}
{
  "_id" : ObjectId("5a1172f17780777507a9be7c"),
  "name" : "Kim",
  "friends" : [ 
    {"name": "Jose"}, 
    {"name": "Avisha"}
  ]
}

您可以使用以下查询来获取结果。

db.getCollection('test').find({"friends.name": {$in: ['Avisha']}})