同じクエリが mongodb 2.0.6 でも正常に機能します。2.2.0 に更新すると、エラーが発生し、操作が実行されません。
"errmsg" : "exception: can't append to array using string field name [$]"
これは次の行で発生します。
db.findAndModify(query, null, null, false, updateJob, true, false);
クエリは次のとおりです。
{ "_id" : ObjectID , "job" : { "$elemMatch" : { "jobId" : "1"}}}
そしてupdateJob
次のとおりです。
{ "$set" : { "job.**$**.endTime" : { "$date" : "2012-09-05T04:12:44.708Z"}}
** 私の Test コレクションは以下のとおりで、最初のジョブを更新して新しい endtime を設定したいと考えています。
{
"_id" : "5f6761d1-589a-4140-9753-5e890ab3ecb9",
"name" : "Test",
"lastJobId" : 2,
"job" : [{
"jobId" : "1",
"jobName" : "test1",
"endTime" : ISODate("2012-09-07T17:39:43.032Z"),
}, {
"jobId" : "2",
"jobName" : "test2",
"endTime" : ISODate("2012-09-07T17:39:43.838Z"),
}]
}
これに使用されるクエリは次のとおりです。
{ findandmodify : "Test", query : { _id : "5f6761d1-589a-4140-9753-5e890ab3ecb9", job : { $elemMatch : { jobId : "1" } } }, update : { $set : { job.$.endTime : new Date(1347039583032) } , new : true }