如何在CouchDB中索引多维数组

Bla*_*end 2 database json couchdb mapreduce cloudant

我有一个多维数组,我想用CouchDB索引(确实使用Cloudant)。我有一些用户,其中包含他们所属的团队的列表。我想搜索找到该团队的每个成员。因此,请获取具有ID为79d25d41d991890350af672e0b76faed的团队对象的所有User对象。我试图在“ Teams.id”上创建一个json索引,但是它不起作用,因为它不是直线数组,而是多维数组。

用户

{
 "_id": "683be6c086381d3edc8905dc9e948da8",
 "_rev": "238-963e54ab838935f82f54e834f501dd99",
 "type": "Feature",
 "Kind": "Profile",
 "Email": "gc@gmail.com",
 "FirstName": "George",
 "LastName": "Castanza",
 "Teams": [
  {
   "id": "79d25d41d991890350af672e0b76faed",
   "name": "First Team",
   "level": "123"
  },
  {
   "id": "e500c1bf691b9cfc99f05634da80b6d1",
   "name": "Second Team Name",
   "level": ""
  },
  {
   "id": "4645e8a4958421f7d843d9b34c4cd9fe",
   "name": "Third Team Name",
   "level": "123"
  }
 ],
 "LastTeam": "79d25d41d991890350af672e0b76faed"
}
Run Code Online (Sandbox Code Playgroud)

bro*_*bes 5

这很像我在Cloudant Selector Query上的回答,但这是适用于您的问题的交易:

运行此查询的最简单方法是使用“ Cloudant Query”(或“ Mango”,在即将发布的CouchDB 2.0版本中将其称为)–而不是CouchDB中的传统MapReduce视图索引系统。(此博客涵盖了差异:https : //cloudant.com/blog/mango-json-vs-text-indexes/,而这是一个概述:https : //developer.ibm.com/clouddataservices/2015/11/ 24 / cloudant-query-json-index-arrays /)。

您的CQ索引应如下所示:

{
  "index": {
    "fields": [
      {"name": "Teams.[].id", "type": "string"}
    ]
  },
  "type": "text"
}
Run Code Online (Sandbox Code Playgroud)

后续查询如下所示:

{
  "selector": {
    "Teams": {"$elemMatch": {"id": "79d25d41d991890350af672e0b76faed"}}
  },
  "fields": [
    "_id",
    "FirstName",
    "LastName"
  ]
}
Run Code Online (Sandbox Code Playgroud)

您可以在Cloudant仪表板的“查询”部分中自行尝试,也可以通过curl进行如下操作:

curl -H "Content-Type: application/json" -X POST -d '{"selector":{"Teams":{"$elemMatch":{"id":"79d25d41d991890350af672e0b76faed"}}},"fields":["_id","FirstName","LastName"]}' https://broberg.cloudant.com/teams_test/_find
Run Code Online (Sandbox Code Playgroud)

该数据库是世界可读的,因此您可以在此处查看我在其中创建的示例文档:https : //broberg.cloudant.com/teams_test/_all_docs?include_docs=true

挖掘Seinfeld主题:D