2016-12-12 2 views
0

Ниже мои данные для сбора пользовательскихДобавить идентификатор пользователя в моей коллекции профилей с использованием агрегации

коллекция пользователя

{ 
    "_id" : ObjectId("584bc9ba420a6b189c510af6"), 
    "old_user_id" :1, 
    "name" :"aaa" 
}, 
{ 
    "_id" : ObjectId("9ba420a584bc6b189c59ba42"), 
    "old_user_id" : 2, 
    "name" :"bbb" 
}, 
{ 
    "_id" : ObjectId("59ba4284bc0a6b189c3323w23"), 
    "old_user_id" : 3, 
    "name" :"ccc" 
} 

коллекция MyProfile

{   
    "old_user_id" :1, 
    "name" :"aaa", 
    "number":"123456789" 
}, 
{ 
    "old_user_id" : 2, 
    "name" :"bbb", 
    "number":"678912345" 
}, 
{ 
    "old_user_id" : 3, 
    "name" :"ccc", 
    "number":"673458912"  
}, 
{ 

    "old_user_id" : 2, 
    "name" : "bbb", 
    "adress" : "afsfdidhddk" 
} 

Мои ожидания:

мне нужно, чтобы соответствовать old_user_id в обоих сборниках и обновить user коллекцию «_id» в моей коллекции profile

{ 
    "userid":"584bc9ba420a6b189c510af6", 
    "old_user_id" :1, 
    "name" :"aaa", 
    "number":"123456789" 
}, 
{ 
    "userid":"9ba420a584bc6b189c59ba42", 
    "old_user_id" : 2, 
    "name" :"bbb", 
    "number":"678912345" 
}, 
{ 
    "userid":"59ba4284bc0a6b189c3323w23", 
    "old_user_id" : 3, 
    "name" :"ccc", 
    "number":"673458912" 
}, 
    { 

    "old_user_id" : 2, 
    "name" : "bbb", 
    "adress" : "afsfdidhddk" 
    "userid" : "9ba420a584bc6b189c59ba42" 
} 

ответ

1

Update:

db.user.find().forEach(function (user) { 

    var cursor = db.myprofile.find({"old_user_id": user.old_user_id}); 

    cursor.forEach(function(myprofile) { 
     myprofile.userid = user._id.str; 
     db.myprofile.save(myprofile); 
    }); 
}); 

Результат:

db.myprofile.find().pretty() 

    { 
    "_id" : ObjectId("584e7294678ae15db4fab039"), 
    "old_user_id" : 1, 
    "name" : "aaa", 
    "number" : "123456789", 
    "userid" : "584e7294678ae15db4fab035" 
} 
{ 
    "_id" : ObjectId("584e7294678ae15db4fab03a"), 
    "old_user_id" : 2, 
    "name" : "bbb", 
    "number" : "678912345", 
    "userid" : "584e7294678ae15db4fab036" 
} 
{ 
    "_id" : ObjectId("584e7294678ae15db4fab03b"), 
    "old_user_id" : 3, 
    "name" : "ccc", 
    "number" : "673458912", 
    "userid" : "584e7294678ae15db4fab037" 
} 
{ 
    "_id" : ObjectId("584e7294678ae15db4fab03c"), 
    "old_user_id" : 2, 
    "name" : "bbb", 
    "adress" : "afsfdidhddk", 
    "userid" : "584e7294678ae15db4fab036" 
} 

Замечание: _ID fiels все еще появляется в итоговых документах, но вы должны быть в состоянии жить с этим. Является поведением MongoDB по умолчанию. Вы можете создать коллекцию без индексированного поля _id like in here: db.createCollection("user", { autoIndexId: false })

+0

проверьте мой вопрос, если у меня есть «old_user_id»: 2 раза его не работает –

+0

Я хочу обновить myprofile не пользователем –

+0

Действительно, исправлено. Теперь он должен работать для большего количества документов с тем же «old_user_id». – sergiuz

1

Вы можете использовать агрегацию Монго. Использование $ lookup, $ project и $ unwind поможет. я сформулировал запрос, надеюсь, что это помогает:

db.myprofile.aggregate([ 
    { 
     $lookup: 
     { 
      from: "user", 
      localField: "old_user_id", 
      foreignField: "old_user_id", 
      as: "inventory_docs" 
     } 
    }, 
    { $project : { _id : "$inventory_docs._id", 
        old_user_id:"$old_user_id", 
       "name":"$name", 
       "number":"$number" } }, 
    {$unwind: "$_id"} 
]) 
+0

http://stackoverflow.com/questions/41124705/based-on-value-how-to-create-new-document-using-node-js-mongodb –

Смежные вопросы