1

There is already an existing CouchDB database which was created based on existing records from a MySQL database.

I have a set of documents like this:

[
    {
        "_id": "lf_event_users_1247537_11434",
        "_rev": "1-19e90d3f19e9da7cc5adab44ebbe3894",
        "TS_create": "2018-12-17T10:29:20",
        "emm_id": 204662,
        "eu_user_id": 201848611,
        "type": "lf_event_users",
        "uid": 1247537,
        "vendor_id": 11434
    },
    {
        "_id": "lf_event_users_1247538_11434",
        "_rev": "1-0d0d1e9f1fb5aad9bafd4c53a6cada17",
        "TS_create": "2018-12-17T10:29:20",
        "emm_id": 204661,
        "eu_user_id": 201848611,
        "type": "lf_event_users",
        "uid": 1247538,
        "vendor_id": 11434
    },
    {
        "_id": "lf_event_users_1247539_11434",
        "_rev": "1-09bc2bfc709ee9c6e6cac9cb34964ac4",
        "TS_create": "2018-12-17T10:29:20",
        "emm_id": 204660,
        "eu_user_id": 201848611,
        "type": "lf_event_users",
        "uid": 1247539,
        "vendor_id": 11434
    }
]

As you can see, all of them are for the same "eu_user_id" = 201848611, and each one has a different "emm_id".

Now, I have another set of document like this in the same CouchDB database:

[
    {
        "_id": "lf_event_management_master_204660_11434",
        "_rev": "2-320111a3814a3efd6838baa0fb5412bb",
        "emm_disabled": "n",
        "emm_title": "Scanned for local delivery",
        "settings": {
            "event_view": "ScannedForLocalDeliveryEvent",
            "sort_weight": 0
        },
        "type": "lf_event_management_master",
        "uid": 204660,
        "vendor_id": 11434
    },
    {
        "_id": "lf_event_management_master_204661_11434",
        "_rev": "2-e6d6ebbd4dc4ca473a376d3d16a58e93",
        "emm_disabled": "n",
        "emm_title": "Local Delivery Cancelled",
        "settings": {
            "event_view": "CancelDeliveryEvent",
            "sort_weight": 4
        },
        "type": "lf_event_management_master",
        "uid": 204661,
        "vendor_id": 11434
    },
    {
        "_id": "lf_event_management_master_204662_11434",
        "_rev": "2-53cb3d3eba80704e87ea5ff8d5c269df",
        "emm_disabled": "n",
        "emm_title": "Local Delivery Exception",
        "settings": {
            "event_view": "DeliveryExceptionEvent",
            "sort_weight": 3
        },
        "type": "lf_event_management_master",
        "uid": 204662,
        "vendor_id": 11434
    }
]

As you can see, each document in this last set has a "uid" matching the "emm_id" in the previous set of documents. Basically this means:

  • A "user" has many allowed "events".

You can see also that the documents of type "lf_event_management_master" has no "eu_user_id" value or any other key matching this.

My question is:

How can I get all documents of type "lf_event_management_master" allowed for user "201848611" in a single query?

In my case, I only have the User ID (201848611) available at the point where I need to get the allowed events. Currently what is happening is:

  • I get all the "lf_event_users" records for this user.
  • Loop all results from previous query and build a new query, extracting this time to find all the "lf_event_management_master" where the "uid" includes any of the "emm_id" values found with the previous query.

Thank you in advance.

David
  • 1,282
  • 3
  • 18
  • 40
  • 1
    Possible duplicate of [Couchdb join two documents using key](https://stackoverflow.com/questions/28248307/couchdb-join-two-documents-using-key) – Jonathan Hall Dec 31 '18 at 09:35

0 Answers0