2017-10-19 9 views
0

현재 Luvit 용 Lua 라이브러리 드라이버를 작성 중입니다. 현재 Lua-ReQL 드라이버와 호환되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 직렬화 된 데이터는특정 데이터 집합에서 오류가 발생했습니다.

[1,[53, [[15, [[14, ["test"]], "table"]], {"Ignore":[],"id":"284381751084843008","Cases":[],"Roles":[],"Timers":[],"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Votes":[]}]],{}] 

데이터 서버에서입니다

{"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Roles":[],"Cases":[],"Votes":[],"Timers":[],"id":"284381751084843008","Ignore":[]} 

문제
데이터, JSON 그대로이며, :

Expected between 1 and 3 elements in a raw term, but found 0. 

답변

0

문제는 배열 중 하나입니다 비어 있습니다. 이 쿼리를 실제로 작성한 쿼리는 무엇입니까? r.db('test').table('table').update(<your document>)이 맞나요?

나는 소스 파일 term_walker.cc을보고있다. UPDATE (전체 객체 {"Ignore"...})에 전달 된 객체는 [MAKE_OBJ, {"Ignore"...}] (AST가 코드 rewrite(src, Term::MAKE_OBJ); 라인으로 처리 됨) 으로 래핑되고 객체 {"Ignore"...}은 optargs 매개 변수와 동일한 방식으로 처리됩니다. 값 필드에 walk이 호출됩니다.

그것은 그들이 이미 [3, <object>] (MAKE_OBJ 때문에 = 3)으로 싸여있는 것처럼 베어 객체가 동일하게 취급받을 것 같습니다. 사용자가 표현식 {"abc": r.add(1, 2)}을 작성하면 MAKE_OBJ 표현식이되고 하위 표현식은 클라이언트 라이브러리에 의해 적절한 ReQL -ese로 변환되어야합니다. 내 생각 엔 클라이언트 라이브러리가 객체를 탐색하지 않고이 변환을 수행하고 있다는 것입니다. 당신은 그렇게 할 필요가 있습니다. 맨손으로 배열 된 것들이 무엇이든 변환 될 수 있습니다 (MAKE_ARRAY 용어?). 귀하의 클라이언트가 통과하지 않고 전혀 처리되지 않는 객체를 전달하게하려면 DATUM을 사용해야합니다.

나는 90 %의 확실성만으로 가이드 라인으로 여기까지 모든 것을 택하십시오.

+0

감사합니다. 나는 데이텀을 사용하기로 결정했고 그것은 매력처럼 작동합니다! <3 – DannehSC