最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB用Mongoose得到的對象不能增加屬性完美解決方法(兩種)

 更新時間:2017年11月28日 11:08:03   投稿:mrr  
本文給大家分享兩種解決方案解決MongoDB用Mongoose得到的對象不能增加屬性問題,本文給大家介紹的非常詳細,需要的朋友參考下吧

一,先定義了一個goods(商品)的models

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var productSchema = new Schema({
  "productId":String,
  "producName": String,
  "salePrice":Number,
  "productImage":String
});
module.exports=mongoose.model("Good",productSchema,'goods');

二,在定義一個users(用戶)的models

var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
  "userId": String,
  "userName": String,
  "userPwd": String,
  "orderList": Array,
  "cartList": [
    {
      "productId":String,
      "producName": String,
      "salePrice":Number,
      "productName": String,
      "productImage": String,
      "checked": String,
      "productNum": String
    }
  ],
  "addressList": Array
});
module.exports = mongoose.model("User", userSchema, 'users')
/*commonjs規(guī)范*/

上述兩個models的關(guān)系可以看出:一個用戶對應(yīng)一個購物車(cartList),一個購物車有多個商品對象

現(xiàn)在我們來為用戶添加商品(我們默認(rèn)是可以直接添加的)===>userDoc為登錄后的用戶,我們?yōu)榇擞脩舻馁徫镘囂砑由唐?/p>

我們goods路由中:

Goods.findOne({
            productId: productId
          }, function (err1, doc) {
            
            if (err1) {
              return res.json({
                status: "1",
                msg: err1.message
              })
            } else {
              if (doc) {//商品

                 doc.productNum="1",
                  doc.checked="1",

                userDoc.cartList.push(doc);
                userDoc.save(function (err2) {
                  if (err2) {
                    return res.json({
                      status: "1",
                      msg: err2.message
                    })
                  } else {
                    return res.json({
                      status: "0",
                      msg: '',
                      result: "suc"
                    })
                  }
                })
              }
            }
          })

上述正常執(zhí)行后,我們并沒有在用戶的購物車中看到productNum和checked, 其余的屬性均被賦值。

這是為什么呢?

因為Mongoose是個ODM (Object Document Mapper),類似于操作關(guān)系型數(shù)據(jù)庫使用的ORM(Object Relational Mapper),我們使用Mongoose取到的數(shù)據(jù)的結(jié)構(gòu)是要依賴于我們定義的schema結(jié)構(gòu)的。增加的屬性在(goods)schema中沒有定義,所以我們給goods臨時附加productNum和checked屬性是無效的。

在這里需要說明一下,就是雖然我們給schema附加屬性,但是這只是實現(xiàn)能真正掛在該schema上,并沒有添加到schema中。比如上述的只是想實現(xiàn)在添加商品的時候,順便把productNum和checked的值賦給users表中。我們無須把屬性存儲到goods中。

結(jié)論:mongodb中使用mongoose取到的對象不能增加屬性。

解決方法一,

在schema中直接增加需要補充的屬性。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var productSchema = new Schema({
  "productId":String,
  "producName": String,
  "salePrice":Number,
  "productImage":String
  "checked": String,
  "productNum": String
});
module.exports=mongoose.model("Good",productSchema,'goods');

這樣兩邊可以對等實現(xiàn),賦值。(有時候不是很好)

解決方法二,

把查詢到的結(jié)果clone一個對象,然后在新對象中補充屬性。

 Goods.findOne({productId: productId}, function (err1, doc) {
            var newobj = null;//新對象
            if (err1) {
              return res.json({
                status: "1",
                msg: err1.message
              })
            } else {
              if (doc) {//商品
                newobj = {//新創(chuàng)建一個對象,實現(xiàn)轉(zhuǎn)換mongoose不能直接增加屬性的坑
                  productNum: "1",
                  checked: "1",
                  productId: doc.productId,
                  producName: doc.producName,
                  salePrice: doc.salePrice,
                  productName: doc.productName,
                  productImage: doc.productImage,
                }
                userDoc.cartList.push(newobj);
                userDoc.save(function (err2) {
                  if (err2) {
                    return res.json({
                      status: "1",
                      msg: err2.message
                    })
                  } else {
                    return res.json({
                      status: "0",
                      msg: '',
                      result: "suc"
                    })
                  }
                })
              }
            }
          })

執(zhí)行之后,我們可以看到mongodb數(shù)據(jù)中的users表的procuctNum和checked被賦值。

總結(jié)

以上所述是小編給大家介紹的MongoDB用Mongoose得到的對象不能增加屬性完美解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • mongodb?linux下集群搭建過程

    mongodb?linux下集群搭建過程

    這篇文章主要介紹了mongodb?linux下集群搭建過程,本例中,為每個集群(shard?config)三個mongo實例,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Mongodb文檔和數(shù)組的通配符索引應(yīng)用小結(jié)

    Mongodb文檔和數(shù)組的通配符索引應(yīng)用小結(jié)

    Mongodb的通配符索引,為靈活可變的Mongodb數(shù)據(jù)結(jié)構(gòu)提供了高效的查詢方法,本文結(jié)合Mongodb官方文檔,詳細介紹在嵌入式文檔和數(shù)組上,通配符索引的結(jié)構(gòu),感興趣的朋友一起看看吧
    2024-07-07
  • MongoDB 快速入門

    MongoDB 快速入門

    MongoDB 快速入門,想要學(xué)習(xí)MongoDB的朋友可以參考下。
    2011-10-10
  • mongodb清除連接和日志的正確方法分享

    mongodb清除連接和日志的正確方法分享

    這篇文章主要給大家介紹了關(guān)于mongodb清除連接和日志的正確方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • 基于Mongodb分布式鎖解決定時任務(wù)并發(fā)執(zhí)行問題

    基于Mongodb分布式鎖解決定時任務(wù)并發(fā)執(zhí)行問題

    這篇文章主要介紹了基于Mongodb分布式鎖解決定時任務(wù)并發(fā)執(zhí)行問題,網(wǎng)上有很多分布式鎖的實現(xiàn)方案,基于redis、zk、等有很多,但是我的就是一個用了mysql和mongo的小應(yīng)用,本文給大家詳細講解,需要的朋友可以參考下
    2023-04-04
  • MongoDB 中聚合統(tǒng)計計算--$SUM表達式

    MongoDB 中聚合統(tǒng)計計算--$SUM表達式

    這篇文章主要介紹了MongoDB 中聚合統(tǒng)計計算--$SUM表達式的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Mongodb副本集和分片示例詳解

    Mongodb副本集和分片示例詳解

    這篇文章主要給大家介紹了關(guān)于Mongodb副本集和分片的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Mongodb具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 關(guān)于NoSQL之MongoDB的一些總結(jié)

    關(guān)于NoSQL之MongoDB的一些總結(jié)

    這篇文章主要介紹了關(guān)于NoSQL之MongoDB的一些總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • mongodb禁止外網(wǎng)訪問及添加賬號的操作方法

    mongodb禁止外網(wǎng)訪問及添加賬號的操作方法

    這篇文章主要介紹了mongodb禁止外網(wǎng)訪問及添加賬號的操作方法,需要的朋友可以參考下
    2017-12-12
  • MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例

    MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例

    這篇文章主要介紹了MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例,本文分別給操作代碼、命令實例,需要的朋友可以參考下
    2015-07-07

最新評論

德令哈市| 石城县| 阿城市| 涿鹿县| 凤庆县| 巴塘县| 昌宁县| 湘阴县| 南宁市| 荆门市| 武宣县| 和龙市| 嵊泗县| 湘西| 阳高县| 九寨沟县| 卢龙县| 莎车县| 平和县| 丹寨县| 普陀区| 高要市| 晋城| 云安县| 宜昌市| 佛坪县| 玉环县| 抚远县| 汝阳县| 宿迁市| 五常市| 酉阳| 北宁市| 颍上县| 阜宁县| 五峰| 宝坻区| 绥中县| 象山县| 道真| 鹤峰县|