2013-04-06 128 views
3

我想將用戶集合中的顏色複製到Car集合中。我正在使用一個外鍵是userID。MongoDB使用外鍵將字段複製到另一個集合

> db.test1.User.find() 
{ "_id" : ObjectId("515f7db83f71d6bcb1c41a48"), "age" : 33, "Color" : "blue" } 
{ "_id" : ObjectId("515f7dc03f71d6bcb1c41a49"), "age" : 52, "Color" : "red" } 
{ "_id" : ObjectId("515f7dc43f71d6bcb1c41a4a"), "age" : 43, "Color" : "yellow" } 


> db.test2.Car.find() 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a54"), "speed" : 291, "userID" : ObjectId("515f7db83f71d6bcb1c41a48") } 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a55"), "speed" : 202, "userID" : ObjectId("515f7db83f71d6bcb1c41a49") } 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a56"), "speed" : 193, "userID" : ObjectId("515f7db83f71d6bcb1c41a4a") } 

這裏是我的查詢

db.test1.User.find().forEach( 
function(x) 
{ 
    db.test2.Car.update({ userID: x._id }, { $set: { color: x.color} }) 
}); 

我想這樣的結果:

> db.test2.Car.find() 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a54"), "speed" : 291, "userID" : ObjectId("515f7db83f71d6bcb1c41a48"), "color" : "blue" } 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a55"), "speed" : 202, "userID" : ObjectId("515f7db83f71d6bcb1c41a49"), "color" : "red" } 
{ "_id" : ObjectId("515f84883f71d6bcb1c41a56"), "speed" : 193, "userID" : ObjectId("515f7db83f71d6bcb1c41a4a"), "color" : "yellow" } 

感謝您的幫助!

+0

你能告訴什麼是真正的問題,是不是,你是不是能夠更新或您的userid不匹配? – Devesh 2013-04-07 18:08:35

回答

2

有幾個問題與您的測試設置:

  • 字段名的情況不符合(要複製時引用的color代替Color
  • 只有例子外鍵的比賽之一目標集合:ObjectId('515f7db83f71d6bcb1c41a48')
  • 您的更新只會影響「外鍵」的第一個匹配文檔。這將是細爲1:1的關係,但沒有一個1:許多

校正的示例考慮到上述情況(除了非匹配鍵):

db.test1.User.find().forEach( 
    function(x) { 
     db.test2.Car.update(
      // query 
      { userID: x._id }, 

      // update 
      { $set: { color: x.Color} }, 

      // options: 
      { "multi" : true } // Update all matching documents 
     ); 
    } 
); 

這導致在實際樣品的文件相匹配的唯一外鍵設置{color:blue}

db.test2.Car.find() 
{ 
    "_id" : ObjectId("515f84883f71d6bcb1c41a55"), 
    "speed" : 202, 
    "userID" : ObjectId("515f7db83f71d6bcb1c41a49") 
} 
{ 
    "_id" : ObjectId("515f84883f71d6bcb1c41a56"), 
    "speed" : 193, 
    "userID" : ObjectId("515f7db83f71d6bcb1c41a4a") 
} 
{ 
    "_id" : ObjectId("515f84883f71d6bcb1c41a54"), 
    "color" : "blue", 
    "speed" : 291, 
    "userID" : ObjectId("515f7db83f71d6bcb1c41a48") 
} 
相關問題