サブ文書の配列を含むモデルがあります。これはCompany
です:私はいくつかの企業を持っている、と私は私が探していphone
に一致するすべての企業内のすべての連絡先のフィールドchatIdを、更新したい複数のサブ文書をマングースとノードで更新する
{
"_id" : ObjectId(":58be7c236dcb5f2feff91ac0"),
"name" : "sky srl",
"contacts" : [
{
"_id" : ObjectId("58be7c236dcb5f2feff91ac2"),
"name": { type: String, required: true },
"company" : ObjectId("58be7c236dcb5f2feff91ac0"),
"email" : "[email protected]",
"chatId" : "",
"phone" : "123456789",
"name" : "John Smith"
},
{
"_id" : ObjectId("58be7f3a6dcb5f2feff91ad3"),
"company" : ObjectId("58be7f3a6dcb5f2feff91ad1"),
"email" : "[email protected]",
"chatId" : "",
"phone" : "987654321",
"name" : "Bill Gaset"
}
],
"__v" : 1
}
。
マイスキーマ定義(問題に焦点を当てるために、簡略化さ):
var contactSchema = new Schema({
[...]
phone: { type: String, required: true },
email: { type: String },
chatId: { type: String },
company: Schema.Types.ObjectId,
});
var companySchema = new Schema({
name: { type: String, required: true },
type: { type: String, default: "company" },
contacts: [contactSchema]
});
私はこのanswer次
var conditions = { "contacts.phone": req.body.phone };
var partialUpdate = req.body; //it contains 'req.body.phone' and 'req.body.chatId' attributes
Company.find(conditions).then(
function (results) {
results.map(function(companyFound) {
companyFound.contacts.forEach(function (contactContainer){
if (contactContainer.phone == partialUpdate.phone) {
contactContainer.chatId = partialUpdate.chatId;
Company.save();
companyFound.save();
contactContainer.save();
results.save();
}
//not sure of what to save, so i save everything
companyFound.save();
contactContainer.save();
results.save();
});
});
});
を試してみました。それは動作しません。それは私が間違っていることは何も保存しませんか?
ピンポイント。それはクエリか更新ですか? 'partialUpdate'とは何ですか?あなたのスキーマを表示することも良い考えかもしれません。 – Mikey
OK、クエリで失敗しました。私が 'Company.find(条件).then(関数(結果){})'を使用すると、IDは失敗します。 私は 'partialUpdate' varを追加します、忘れました、ありがとう! – Diego
私は試しましたが、 'var conditions = {" phone ":req.body.phone}; Contact.find(条件).then( 関数(結果){ はconsole.log( "結果:" ヌル+ JSON.stringify(結果、4)); }); ' 示します空の配列 – Diego