简体   繁体   English

RethinkDB Python递归文档过滤器

[英]RethinkDB Python Recursive Document Filter

Trying to do a recursive filter query on RethinkDB with they Python wrapper. 尝试使用Python包装器在RethinkDB上进行递归过滤器查询。 Having a lot of trouble getting it work. 使它工作很麻烦。

Tried a lot of variations of the query, to no avail. 尝试了很多查询变体,无济于事。 Essentially, I'm trying to find the rows which do not have a document nested under label with a particular user_id. 本质上,我正在尝试查找没有嵌套在带有特定user_id的label下的文档的行。

In plain english: if the current user already labeled this example, don't return it to them again. 用简单的英语来说:如果当前用户已经标记了此示例,请不要再将其返回给他们。

My non-working query: 我的无效查询:

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)

My dataset 我的数据集

[
    {
        "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."
    }
]

Thank you for your help! 谢谢您的帮助!

This was a tough one but the solution ended up being two-fold. 这是一个艰难的过程,但解决方案最终变成了两倍。

A slight modification to the schema when saving, then using RethinkDB's contains method. 保存时对架构进行了轻微修改,然后使用RethinkDB的contains方法。

Here is the modified query that works well. 这是运行良好的修改后的查询。

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM