簡體   English   中英

Mongodb從文檔獲取唯一值並添加到數組

[英]Mongodb get unique value from documents and add to array

我想根據兩個文檔集中都應包含的值進行查詢,以將一個集合中的文檔與另一個集合中的文檔進行匹配,但是,由於得知Mongo不支持JOIN,我相信我可以用自己想要的方式做我想做的事。

然后,我的替代方法是將文檔插入到集合(col1)中,我要在其中進行查詢和更新,其中包含另一個集合(col2)中所有唯一循環號的數組。

收藏1(Col 1)

        {
        "_id" : ObjectId("5670961f910e1f54662c11ag"),
        "objectType" : "Account Balance",
        "Customer" : "Thomas Brown",
        "status" : "unprocessed",
        "cycle" : "1234"
    }, 
    {
        "_id" : ObjectId("5670961f910e1f54662c12fd"),
        "objectType" : "Account Balance",
        "Customer" : "Luke Underwood",
        "status" : "unprocessed",
        "cycle" : "1235"
    }

收藏2(Col 2)

        {
        "_id" : ObjectId("5670961f910e1f54662c1d9d"),
        "objectOrigin" : "Xero",
        "Value" : "500.00",
        "key" : "grossprofit",
        "cycle" : "1234",
        "company" : "e56e09ef-5c7c-423e-b699-21469bd2ea00"
    }, 
    {
        "_id" : ObjectId("5670961f910e1f54662c1d9f"),
        "objectOrigin" : "Xero",
        "Value" : "500.00",
        "key" : "grossprofit",
        "cycle" : "1234",
        "company" : "0a514db8-1428-4da6-9225-0286dc2662c1"
    }, 
    {
        "_id" : ObjectId("5670961f910e1f54662c1da0"),
        "objectOrigin" : "Xero",
        "Value" : "-127.28",
        "key" : "grossprofit",
        "cycle" : "1234",
        "company" : "c2d0561c-dc5d-44b9-beaf-d69a3472a2b8"
    }, 
    {
        "_id" : ObjectId("5670961f910e1f54662c1da1"),
        "objectOrigin" : "Xero",
        "Value" : "-127.28",
        "key" : "grossprofit",
        "cycle" : "1235",
        "company" : "c3fbe6e4-962a-45f6-9ce3-71e2a588438c"
    }

所以我想在集合1中創建一個文檔,如下所示:

    {
        "_id" : ObjectId("5670961f910e1f54662c1d9f"),
        "objectType" : "Status Updater",
        "cycles" : ["1234","1235"]
    }

現在,我要做的是查詢所有文檔,這些文檔中的cycle = cycles並將“狀態”更新為“已處理”。 我相信我可以使用findAndModify與multi:true,但不是完全確定。

完成后,我將僅刪除集合1中objectType為“ Status Updater”的任何文檔。

如果我理解正確,您想

  • a)更新集合1中的所有文檔,其中集合2中存在cycle值。
  • b)此外,您的"objectType" : "Status Updater"類型的文檔"objectType" : "Status Updater"只是一個臨時文檔,用於跟蹤所有循環值。

我認為您可以跳過b)並僅使用以下代碼(此代碼需要在mongo shell中執行):

# get values of all unique cycle values
# returns an array containing: ["1234", "1235", ...]
values = db.coll2.distinct("cycles", {})

# find all documents where cycles value is in the values array 
# and update their status.
db.coll1.update({cycles: {$in: values}}, {$set: {status: "processed"}}, {multi: true})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM