2012-03-24 7 views
11

私はdbshel​​lでコレクション内のオブジェクトを複製(複製)する必要があります。 ユーザー私はuserXの中で(名前変更)USER1フィールドを変更し、オブジェクトを複製することができますどのようにコレクションに複雑なオブジェクトを選択USER1MongoDBオブジェクトを同じデータベースのコレクションでどのように複製(複製)しますか?

> db.users.distinct('nickname') 
[ 
     "user1", 
     "user2", 
     "user3", 
     "user4" 
] 
> 

:このような何かを持って?

答えて

14

コード

> user = db.users.findOne({'nickname': 'user1'}) 
> user.nickname = 'userX' 
> delete user['_id'] 
> db.users.insert(user) 

説明

あなたはユーザーオブジェクトを検索し、変数にそれを配置する必要があります。必要なプロパティを変更する必要があり、オブジェクト全体を新しいものとして挿入する必要があるよりも必要です。これを達成するには、オブジェクトに既に存在するプロパティ_idを削除する必要があります。そして、新しいものを作成するのにinsertを使用するだけではありません。

+0

、あなたは歓迎されているLucaG.Soave @おかげ –

+0

素晴らしいです!ありがとうございました:) – lig

+0

@ LucaG.Soave私のコードの更新が大幅に変更 元のアイデアは 'user1'を削除しないことでした。 – lig

2

_idフィールドは必須フィールドですので、削除することはできません。私が行うのは、返されたオブジェクトにtoSON()を呼び出し、_idを削除することです。

var rObject = dbObject.toJSON(); 
delete rObject._id; 
db.insert(rObject); 
5

_idプロパティは削除しないでください。何らかの理由で一部の値がtypeを失います。たとえば、整数は倍精度に変換されます。

使用this solution

var user = db.users.findOne(...) 
user._id = new ObjectId() 
// set other properties 
db.users.insert(user) 
+0

この回答にもっと注意を払う必要があります... – frhd

関連する問題