0
これで壁に頭をぶつけてしまったので、どんな助けでも大歓迎です。 MongooseJSでは、Model.findを実行してから、その結果をループしてfindAndUpdateを実行しています。Find loop内のMongooseJS findAndUpdate
(基本的には、MongooseJSからのURLのリストを取得し、各URLをpingしてステータスを取得し、ステータスを更新します)。
スキーマ
var serverSchema = new Schema({
github_id: { type: String, required: true },
url: { type: String, required: true },
check_interval: Number,
last_check: {
response_code: Number,
message: String,
time: Date
},
created_at: Date,
updated_at: Date
})
は、ここでは、コードスニペットです:
// Doesn't work
Server.find(function (err, items) {
if (err) return console.log(err)
items.forEach(function (item) {
var query = {url: item.url}
Server.findOneAndUpdate(query, {updated_at: Date.now()}, function (err, doc) {
if (err) return console.log(err)
console.log(doc)
})
})
})
// Works!
var query = {url: 'https://google.com'}
Server.findOneAndUpdate(query, {updated_at: Date.now()}, function (err, doc) {
if (err) return console.log(err)
console.log(doc)
})
上のデバッグを、私は.find()は私が望むデータを取得していることがわかります。しかし、彼は.find()内のfindOneAndUpdateは決して実行されないようです(item.urlは正しく設定されています)。エラーは出ません。実行されません。
助けがあれば幸いです。
私はあなたの助けに感謝します。 findからリストをループする必要があります。私はあなたのコードに入れます。そしてそれはまだアップデートを実行しません(.find()の実行を参照してください。)。 –
あなたはその項目'' forEach'''の中の '' item.url''は期待値を与えています... '' 'Server''のスキーマは何ですか?あなたはスキーマで質問を更新できますか? –
スキーマが追加されました。はい、Server.findOneAndUpdateの直前にconsole.log(クエリ)を置くと正しく出力されます。 –