couchdb匹配多个不一致的密钥
考虑到以下两份文件:couchdb匹配多个不一致的密钥,couchdb,Couchdb,考虑到以下两份文件: { "_id": "a6b8d3d7e2d61c97f4285220c103abca", "_rev": "7-ad8c3eaaab2d4abfa01abe36a74da171", "File":"/store/document/scan_bgd123.jpg", "Commend": "Describes a person", "DateAdded": "2014-07-17T14:13:00Z", "Name": "Joe",
{
"_id": "a6b8d3d7e2d61c97f4285220c103abca",
"_rev": "7-ad8c3eaaab2d4abfa01abe36a74da171",
"File":"/store/document/scan_bgd123.jpg",
"Commend": "Describes a person",
"DateAdded": "2014-07-17T14:13:00Z",
"Name": "Joe",
"LastName": "Soap",
"Height": "192cm",
"Age": "25"
}
{
"_id": "a6b8d3d7e2d61c97f4285220c103c4a9",
"_rev": "1-f43410cb2fe51bfa13dfcedd560f9511",
"File":"/store/document/scan_adf123.jpg",
"Comment": "Describes a car",
"Make": "Ford",
"Year": "2011",
"Model": "Focus",
"Color": "Blue"
}
如何查找基于多个条件的文档,例如“Make”=“Ford”和“Color”=“Blue”。我意识到我需要一个视图,但我不知道键是什么,从这两个文档中可以看出,键/值对不一致。唯一一致的项是“文件”键
我正在尝试创建couchDB数据库,该数据库将存储文件的位置,但使用键/值对进行标记
编辑:
也许我应该重新考虑我的数据结构。稍微修改一下
{
"_id": "a6b8d3d7e2d61c97f4285220c103c4a9",
"_rev": "1-f43410cb2fe51bfa13dfcedd560f9511",
"File": "/store/document/scan_adf123.jpg",
"Tags": {
"Comment": "Describes a car",
"Make": "Ford",
"Year": "2011",
"Model": "Focus",
"Color": "Blue"
}
}
因此,我需要通过标记中的键>值对或任意数量的键>值对来查找我想要的文档。这里的问题是,我想用键>值对标记对象。每个视图的这些标记可能非常不同,因此下一个文档将有一整套不同的键>值对。Couchdb支持灵活的模式。文档无需保持一致,即可进行查询。您的场景的视图非常简单。下面是应该实现这一技巧的map函数
function(doc){
if(doc.Make&&doc.Color)
emit([doc.Make,doc.Color],null);
}
这将为您提供一个视图,您可以像这样进行查询
/view name/key=[“福特”,“蓝色”]&包括_docs=true
这会给你想要的结果
根据评论进行编辑
为此,您将需要两个独立的视图。couchdb中的每个视图都是为了满足特定的查询需求而设计的。这意味着您必须考虑数据的访问策略。最初,您需要做更多的工作,但麻烦的是,您会得到索引的数据,并且访问时间非常快
所以直接回答你的问题。创建两个视图。一个是我们已经做过的制作,另一个是名字
function(doc){
if(doc.Name&&doc.LastName)
emit([doc.Name,doc.Name],null);
}
现在,“名称”视图将只索引那些包含名称的文档。其中as Make视图将索引其中包含Make的文档
当您没有查询的需求将来出现时会发生什么情况?
你可以试试看
蒂阿克沙。这就是问题所在。该视图检查是否存在“Make”和“Color”,但是,下一个文档可能有一组完全不同的键值对,我希望匹配这些键值对。例如,我提供的另一个文档有“Name”和“LastName”。这意味着,根据提供的视图,我不会将此文档与query.Ty匹配,以获得您的帮助。我是noSQL和couchDB的新手,来自MySQL的背景,我正在努力寻找我的方向。所以相信我,当我说,我学到了很多。我在原来的问题上补充了一些信息。希望这有助于澄清。