1

尝试使用 Python 包装器对 RethinkDB 进行递归过滤器查询。很难让它工作。

尝试了很多查询的变体,但无济于事。本质上,我试图找到没有嵌套在label特定 user_id 下的文档的行。

简而言之:如果当前用户已经标记了此示例,请不要再次将其返回给他们。

我的非工作查询:

open_tasks = rdbt \
    .order_by(index=r.desc('labels_completed')) \
    .filter(r.row['locked'] == False) \
    .filter(lambda task:
            task['labels']['user_id'] != current_user.id) \
    .limit(qty) \
    .run(conn)

我的数据集

[
    {
        "id": "e54893b4-b1d0-49c5-b6aa-9aa9e7d2b73b",
        "image": "https://dl.dropboxusercontent.com/u/5822/crowdlabeler/ABLXOTODWJKTXECYZTST.jpg",
        "labels": [
            {
                "account_qty_labeled": 54,
                "account_signup_date": "Tue Aug 04 2015 10:12:25 GMT-04:00",
                "compensation": 0.01,
                "dataset_id": 144,
                "label": {
                    "$$hashKey": "object:45",
                    "answer": "Yes",
                    "selected": true
                },
                "label_duration_sec": 3,
                "labeled_at": "Wed Aug 05 2015 16:26:04 GMT-05:00",
                "sess_duration_sec": 3,
                "sess_qty_labeled": 0,
                "user_id": 1
            }
        ],
        "labels_completed": 0,
        "locked": false,
        "text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate adipisci vero minus laudantium reprehenderit exercitationem eius, suscipit facilis laboriosam consequuntur, eligendi quis mollitia excepturi deserunt dicta, dolorem quaerat pariatur provident sint explicabo. Magnam possimus dolorum beatae quidem excepturi quibusdam dolore reprehenderit accusantium quae ad libero, voluptatum laborum, incidunt, voluptate reiciendis."
    },
    {
        "id": "9f08869e-79fd-49c0-a184-c43d2a1c95cf",
        "image": "https://dl.dropboxusercontent.com/u/5822/crowdlabeler/ACSGHDYECQWQXDHIOBYC.jpg",
        "labels": [],
        "labels_completed": 0,
        "locked": false,
        "text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate adipisci vero minus laudantium reprehenderit exercitationem eius, suscipit facilis laboriosam consequuntur, eligendi quis mollitia excepturi deserunt dicta, dolorem quaerat pariatur provident sint explicabo. Magnam possimus dolorum beatae quidem excepturi quibusdam dolore reprehenderit accusantium quae ad libero, voluptatum laborum, incidunt, voluptate reiciendis."
    },
    {
        "id": "9fba0a39-4cfd-4a97-b48f-e8bf2b0d46c5",
        "image": "https://dl.dropboxusercontent.com/u/5822/crowdlabeler/ADMNIUYKUHAIOHMAFXBK.jpg",
        "labels": [],
        "labels_completed": 0,
        "locked": false,
        "text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate adipisci vero minus laudantium reprehenderit exercitationem eius, suscipit facilis laboriosam consequuntur, eligendi quis mollitia excepturi deserunt dicta, dolorem quaerat pariatur provident sint explicabo. Magnam possimus dolorum beatae quidem excepturi quibusdam dolore reprehenderit accusantium quae ad libero, voluptatum laborum, incidunt, voluptate reiciendis."
    }
]

谢谢您的帮助!

4

1 回答 1

0

这是一个艰难的解决方案,但最终解决方案是双重的。

保存的时候稍微修改一下schema,然后使用RethinkDB的contains方法。

这是运行良好的修改后的查询。

open_tasks = rdbt \
    .order_by(index=r.desc('labels_completed')) \
    .filter(r.row['locked'] == False) \
    .filter(lambda task:
            r.not_(task['labeler_ids'].contains(current_user.id))) \
    .limit(qty) \
    .run(conn)
于 2015-08-10T01:46:58.063 回答