2013-09-02 32 views
35

Tôi đang cố xóa một khóa khỏi tài liệu RethinkDB. cách tiếp cận của tôi (mà không làm việc):Làm cách nào để xóa khóa khỏi tài liệu RethinkDB?

r.db('db').table('user').replace(function(row){delete row["key"]; return row}) 

cách tiếp cận khác:

r.db('db').table('user').update({key: null}) 

Cái này chỉ đặt row.key = null (trông hợp lý).

Ví dụ được thử nghiệm trên rethinkdb data explorer thông qua giao diện người dùng web.

Trả lời

61

Dưới đây là ví dụ có liên quan từ các tài liệu trên trang web RethinkDB của: http://rethinkdb.com/docs/cookbook/python/#removing-a-field-from-a-document

Để loại bỏ một trường từ tất cả các tài liệu trong một bảng, bạn cần phải sử dụng replace để cập nhật tài liệu để không bao gồm trường mong muốn (sử dụng without):

r.db('db').table('user').replace(r.row.without('key')) 

Để loại bỏ lĩnh vực này từ một tài liệu cụ thể trong bảng:

r.db('db').table('user').get('id').replace(r.row.without('key')) 

Bạn có thể thay đổi lựa chọn của tài liệu để cập nhật bằng cách sử dụng bất kỳ selectors trong API (http://rethinkdb.com/api/), ví dụ db, table, get, get_all, between, filter.

+3

Nếu bạn đang tìm kiếm phiên bản javascript của công thức: http://rethinkdb.com/docs/cookbook/javascript/#removing-a-field-from-a-document – neumino

+3

Làm cách nào tôi có thể làm điều này cho trường lồng nhau của Chìa khóa? – Suvitruf

+7

@Suvitruf, bạn có thể sử dụng cú pháp trường lồng nhau như sau: '.replace (r.row.without ({key1: {key2: true}}))' – BarthesSimpson

9

Bạn có thể sử dụng replace với without:

r.db('db').table('user').replace(r.row.without('key')) 
+2

Làm thế nào tôi có thể làm điều này cho lĩnh vực lồng nhau của chính? – Suvitruf

+2

Đối với các trường lồng nhau, bạn có thể sử dụng cú pháp trường lồng nhau như sau: '.replace (r.row.without ({key1: {key2: true}}))' – BarthesSimpson

+0

nhận xét tuyệt vời, cảm ơn! – pregmatch

1

Bạn không cần sử dụng thay thế để cập nhật toàn bộ tài liệu. Dưới đây là tài liệu có liên quan: ReQL command: literal

Giả tài liệu người dùng của bạn trông như thế này:

{ 
    "id": 1, 
    "name": "Alice", 
    "data": { 
    "age": 19, 
    "city": "Dallas", 
    "job": "Engineer" 
    } 
} 

Và bạn muốn loại bỏ tuổi từ tài sản dữ liệu. Thông thường, cập nhật sẽ chỉ hợp nhất dữ liệu mới của bạn với dữ liệu cũ. r.literal có thể được sử dụng để xử lý đối tượng dữ liệu dưới dạng một đơn vị duy nhất.

r.table('users').get(1).update({ data: r.literal({ age: 19, job: 'Engineer' }) }).run(conn, callback) 

// Result passed to callback 
{ 
    "id": 1, 
    "name": "Alice", 
    "data": { 
    "age": 19, 
    "job": "Engineer" 
    } 
} 

hoặc

r.table('users').get(1).update({ data: { city: r.literal() } }).run(conn, callback) 

// Result passed to callback 
{ 
    "id": 1, 
    "name": "Alice", 
    "data": { 
    "age": 19, 
    "job": "Engineer" 
    } 
} 
Các vấn đề liên quan