あるドキュメントのobjectIDを属性(リンク)として別のドキュメントに保存しようとしていますが、mongoはこのエラーを出し続けます。この行の構文の何が問題になっていますか?
for u in self.request.db.lyrics.find():
u['forSong'] = self.request.db.song.find({}, {'_id': 1})
self.request.db.lyrics.save(u)
あるドキュメントのobjectIDを属性(リンク)として別のドキュメントに保存しようとしていますが、mongoはこのエラーを出し続けます。この行の構文の何が問題になっていますか?
for u in self.request.db.lyrics.find():
u['for
あるドキュメントのobjectIDを属性(リンク)として別のドキュメントに保存しようとしていますが、mongoはこのエラーを出し続けます。この行の構文の何が問題になっていますか?
for u in self.request.db.lyrics.find():
u['forSong'] = self.request.db.song.find({}, {'_id': 1})
self.request.db.lyrics.save(u)
問題は、findメソッドの結果がオブジェクトのリストではなくカーソルになることです。
u['forSong'] = self.request.db.song.find({}, {'_id': 1})
オブジェクトではなくカーソルです。したがって、タスクを実行するには、返されたカーソルをリストに変換する必要があります。
u['forSong'] = list(self.request.db.song.find({}, {'_id': 1}))
これにより、{'_ id':object-id}のようなdictのリストが「forSong」フィールドに保存されます。オブジェクトIDのリストを実際に受け取るには、さらに変換を行う必要があります。例:
from operator import itemgetter
...
u['forSong'] = map(itemgetter('_id'),
list(self.request.db.song.find({}, {'_id': 1})))
問題は、findメソッドの結果がカーソルであり、オブジェクトのリストではないことです。
u['forSong'] = self.request.db.song.find({}, {'_id': 1})
オブジェクトではなく、カーソルです。したがって、タスクを実行するには、返されたカーソルをリストに変換する必要があります。
u['forSong'] = list(self.request.db.song.find({}, {'_id': 1}))
これにより、{'_id': object-id} のような辞書のリストが「forSong」フィールドに保存されます。オブジェクト ID のリストを実際に受け取るには、さらに変換を行う必要があります。
from operator import itemgetter
...
u['forSong'] = map(itemgetter('_id'),
list(self.request.db.song.find({}, {'_id': 1})))