亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過貓鼬將項目推入mongo數組

通過貓鼬將項目推入mongo數組

茅侃侃 2019-06-29 10:08:07
通過貓鼬將項目推入mongo數組我已經找了很好的答案,但我相信我迷失了正確的詞語來描述我的目標?;旧?,我有一個名為“People”的MongoDB集合,該集合的模式如下所示:people: {          name: String,           friends: [{firstName: String, lastName: String}]         }現在,我有了一個非常基本的Express應用程序,它連接到數據庫,并使用一個空的朋友數組成功地創建了“People”。在應用程序的次要位置,有一個表單可以添加朋友。表單接受FirstName和LastName,然后使用name字段發布,并引用適當的People對象。我很難做的是創建一個新的朋友對象,然后將它“推”到“朋友”數組中。我知道,當我通過mongo控制臺執行此操作時,我使用了UPDATE函數,并將$Push作為查找條件之后的第二個參數,但我似乎找不到讓貓鼬這樣做的適當方法。db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});最新情況:所以艾德里安的回答很有幫助。以下是我為實現我的目標所做的事情。在app.js文件中,我使用app.get('/addfriend', users.addFriend);在我的users.js文件中exports.addFriend = function (req, res, next){var friend = {"firstName": req.body.fName, "lastName": req.body.lName};Users.findOneAndUpdate({name: req.user.name}, {$push: {friends: friend}});};
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

假設,var friend = { firstName: 'Harry', lastName: 'Potter' };

有兩種選擇:

更新內存中的模型并保存(普通javascript array.ush):

person.friends.push(friend);person.save(done);

PersonModel.update(
    { _id: person._id }, 
    { $push: { friends: friend } },
    done);

我總是在可能的時候嘗試第一種選擇,因為它會尊重貓鼬給你帶來的更多好處(鉤子、驗證等等)。

然而,如果您正在進行大量并發寫操作,您將遇到競爭條件,最終會出現嚴重的版本錯誤,從而阻止您每次替換整個模型,并失去您添加的前一個朋友。所以只有在絕對必要的時候才去前者。


查看完整回答
反對 回復 2019-06-29
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

這個$Push運算符將指定的值追加到數組中。

{ $push: { <field1>: <value1>, ... } }

$Push添加以值作為其元素的數組字段。

上面的答案滿足了所有的要求,但我做了以下工作

var objFriends = { fname:"fname",lname:"lname",surname:"surname" };Friend.findOneAndUpdate(
   { _id: req.body.id }, 
   { $push: { friends: objFriends  } },
  function (error, success) {
        if (error) {
            console.log(error);
        } else {
            console.log(success);
        }
    });)


查看完整回答
反對 回復 2019-06-29
  • 3 回答
  • 0 關注
  • 639 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號