0

クエリの結果をあるテーブルから別のテーブルに挿入しようとしています。ただし、クエリを実行しようとすると、エラーが発生します。

{
  "deleted": 0 ,
  "errors": 1 ,
  "first_error":  "Expected type OBJECT but found ARRAY." ,
  "inserted": 0 ,
  "replaced": 0 ,
  "skipped": 0 ,
  "unchanged": 0
}

挿入とクエリは次のとおりです。

r.db('test').table('destination').insert(
  r.db('test').table('source').map(function(doc) {
    var result = doc('result');

    return result('section_list').concatMap(function(section) {
      return section('section_content').map(function(item) {
        return {
          "code": item("code"),
          "name": item("name"),
          "foo": result("foo"),
          "bar": result("bar"),
          "baz": section("baz"),
          "average": item("average"),
          "lowerBound": item("from"),
          "upperBound": item("to")
        };
      });
    });
  });
);

これには特別な構文がありますか、それとも結果を取得してから別の挿入を実行する必要がありますか?

4

2 に答える 2

0

ここでの問題は、結果が一連のオブジェクトの配列になることでした。すなわち

[ [ { a:1, b:2 }, { a:1, b:2 } ], [ { a:2, b:3 } ] ]

したがって、外側のmap呼び出しを呼び出しに変更する必要がありましたconcatMap。クエリは次のようになります。

r.db('test').table('destination').insert(
  r.db('test').table('source').concatMap(function(doc) {
    var result = doc('result');

    return result('section_list').concatMap(function(section) {
      return section('section_content').map(function(item) {
        return {
          "code": item("code"),
          "name": item("name"),
          "foo": result("foo"),
          "bar": result("bar"),
          "baz": section("baz"),
          "average": item("average"),
          "lowerBound": item("from"),
          "upperBound": item("to")
        };
      )});
    });
  });
}

#rethinkdb freenode の @AtnNn に、正しい方向に向けてくれてありがとう。

于 2015-09-18T20:56:58.707 に答える