3

あるドキュメントの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})))
4

1 に答える 1

3

問題は、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})))
于 2012-08-08T18:39:23.617 に答える