我在找到更新的方法时遇到了一些麻烦,即修改或删除嵌入列表中的某个文档。这是我的情况:
CREATE CLASS Tag EXTENDS V
CREATE PROPERTY Tag.label STRING
CREATE CLASS Profession
CREATE PROPERTY Profession.jobtitle STRING
CREATE PROPERTY Profession.tags LINKSET Tag
CREATE CLASS UserProfile EXTENDS V
CREATE PROPERTY UserProfile.screenname STRING
CREATE PROPERTY UserProfile.profession EMBEDDEDLIST Profession
因此,向UserProfile.profession
添加条目是没有问题的:
UPDATE UserProfile ADD profession =
{"@type":"d","@class":"Profession","jobtitle":"Actress", "tags" : ["#22:5"]}
WHERE screenname = 'emma'
考虑到一些条目' emma'对于UserProfile和id为#22:5的标记。
但是,当我尝试使用职位名称' Actress'更新职业文档时,我该怎么办?我尝试了以下方法,该方法仅适用于列表中的一个条目:
UPDATE UserProfile SET profession =
{"@type":"d","@class":"Profession","jobtitle":"Actress", "tags" : ["#22:7", "#22:9"]}
WHERE profession.jobtitle = 'Actress'
AND screenname = 'emma'
此语句不会抛出任何异常,并返回0作为受影响记录的数量。
一般情况下:如何在嵌入式列表中访问特定条目(使用文档本身的密钥)或设置为更新或删除它?
另外:是否有更简单的方法来更新嵌入式列表中Profession文档中的标签链接集?或者我是否总是需要获取整个文档并重新编写修改后的版本?
谢谢!
INGO
答案 0 :(得分:0)
您可以使用
UPDATE UserProfile set profession = [{"@type":"d","@class":"Profession","jobtitle":"Actress", "tags" : ["#22:7", "#22:9"]}]
WHERE profession.jobtitle contains "Actress" AND screenname = 'emma'
<强>更新强>
你可以使用这个javascript函数
var g=orient.getGraph();
var b=g.command("sql","select from userprofile");
var tag1=g.command("sql","select from #22:7");
var tag2=g.command("sql","select from #22:9");
for(i=0;i<b.length;i++){
var screenname= b[i].getProperty("screenname");
if(screenname=="emma"){
var pro=b[i].getProperty("profession");
for(j=0;j<pro.length;j++){
if(pro[j].field("jobtitle")=="Actress"){
pro[j].field("tags",[tag1[0],tag2[0]]);
}
}
b[i].save();
}
}
答案 1 :(得分:0)
试试这个
UPDATE UserProfile SET profession.jobtitle = 'aaaa'
WHERE profession.jobtitle = 'Actress'
AND screenname = 'emma'