我有2个文档-
1. doc1-
<root>
<id1>1</id1>
<id2>243</id2>
<id3>3343</id3>
<id4>4454</id4>
<id5>546</id5>
</root>
2. doc2-
<root>
<id1>1</id1>
<id2>abc</id2>
<id3></id3>
<id4></id4>
<id6>35545</id6>
<id7>Delhi</id7>
</root>
如果(id1相等),我想要这样的输出-
<root>
<id1>1</id1>
<id2>243</id2>
<id3>3343</id3>
<id4>4454</id4>
<id5>546</id5>
<id6>35545</id6>
<id7>Delhi</id7>
</root>
基本上,我是通过从doc1中获取内容来更新doc2的。
代码:-
declare function local:replace-nodes($doc_2 as node(), $doc_1 as node()){
let $doc :=
for $each-node in $doc_1//*/*[text()]
return xdmp:node-replace($doc_2//*/*[local-name(.)=fn:local-
name($each-node)], $each-node)
return "Nodes Replaced"
};
从上面的代码我得到下面的输出-
<root>
<id1>1</id1>
<id2>243</id2>
<id3>3343</id3>
<id4>4454</id4>
<id6>35545</id6>
<id7>Delhi</id7>
</root>
即节点将被替换,但不会从doc1中插入多余的节点(在这种情况下为id5)。有什么建议吗?
答案 0 :(得分:3)
问题是id5在doc2中不存在,并且您正在使用xdmp:node-replace
。您不能替换不存在的节点。在发生这种情况时,您需要扩展逻辑来处理类似xdmp:node-insert-child
这样的情况。
答案 1 :(得分:1)
SELECT * FROM communities c LEFT JOIN communities_follow cf ON c.user_id = cf.user_id where
cf.user_id = '$user_id';