2015-12-16 59 views
0

我想要执行查询以基于两个文档集中应包含的值匹配一个集合中的文档与另一个集合中的文档,但正如我所了解的Mongo不支持JOIN,我相信我不能按照我想要的方式做我想做的事。Mongodb从文档中获得唯一值并将其添加到数组

然后,我的替代方法是将文档插入到要在其中执行查询和更新的集合(col1)中,其中包含所有其他集合(col2)中的所有唯一周期数的数组。

集1(西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(西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" 
    } 

所以我想创建收藏集的文件看起来像这样:

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

现在我想要做的是查询所有文件,其中cycle = cycles并将“status”更新为“processed”。我相信我会用findAndModify和multi来做到这一点:真实但不完全确定。

完成后,我将只删除集合1中objectType为“状态更新程序”的任何文档。

回答

0

如果我理解正确的话,你要

  • 一)更新所有文档集合#1,其中的cycle 值在集合#2存在。
  • b)此外,您的文件类型"objectType" : "Status Updater"只是一个临时文件,以跟踪所有的周期 值。

我想你可以跳过B),只是使用以下(此代码需要在蒙戈外壳将被执行):

# 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}) 
+0

我给一个去,但是从我所看到的,这是完全正确的 –

+0

嗨马丁,我给了它一个去,虽然它没有错误,它没有做任何事情。我必须将注释更改为// //获取所有唯一循环值的值 //返回包含以下内容的数组:[“1234”,“1235”,...] values = db.coll2.distinct( “cycles”,{}) //找到周期值位于值数组 中的所有文档//并更新其状态。 db.coll1.update({cycles:{$ in:values}},{$ set:{status:“processed”}},{multi:true}) 谢谢 –

+0

运行后'values'的值是多少第一行? –

相关问题