猫鼬:更新字段,将对象推送到数组中[重复]

Posted

技术标签:

【中文标题】猫鼬:更新字段,将对象推送到数组中[重复]【英文标题】:mongoose: update field, push object in array [duplicate] 【发布时间】:2016-02-28 19:17:24 【问题描述】:

我想在 mongo 数据库的数组中添加一个元素:

db.keypairs.update( pubkey: "1234567890",  $push: listTxId: txHash: "yyy", spent: false   )

结果很完美:

listTxId" : [  "txHash" : "xxx", "spent" : true , "txHash" : "yyy", "spent" : false  ]

现在我想对 node.js 和 mongoose 做同样的事情

var res = wait.forMethod(Keypair,'update', pubkey: "1234567890",  $push:  "listTxId": "txHash":"zzz", "spent":false   );

Keypair 是我的 mongoose 集合的 node.js 模型:

var Keypair = require('./app/models/Keypair');

而wait.forMethod来自一个节点模块:

var wait = require('wait.for');

结果,我有这个“_id”元素:

 "txHash" : "zzz", "spent" : false, "_id" : ObjectId("56561571fea5d9a10a5771fd") 

问题:这个 ObjectId 来自哪里?我怎样才能摆脱它?

更新:猫鼬模式:

var keypairSchema = mongoose.Schema(
    userId      :  type: mongoose.Schema.Types.ObjectId, ref: 'User' ,
    pubkey      : String,
    privkeyWIF  : String, // temp
    balance     : Number,
    listTxId    : [
        txHash : String,
        spent  : Boolean
     ],
    walletId    :  type: mongoose.Schema.Types.ObjectId, ref: 'Wallet' ,
    description :  type: String, maxlength: 40 ,
    comments    : String,
    isMasterKey :  type: Boolean, default: false ,
    date        : Date
);

【问题讨论】:

【参考方案1】:

Mongoose 会将 id 放入您的子文档数组中。 listTxId 是一个子文档数组。您可以将 _id: false 添加到您的架构中以防止这种情况发生:

var keypairSchema = mongoose.Schema(
    userId      :  type: mongoose.Schema.Types.ObjectId, ref: 'User' ,
    pubkey      : String,
    privkeyWIF  : String, // temp
    balance     : Number,
    listTxId    : [
        _id: false,
        txHash : String,
        spent  : Boolean
     ],
    walletId    :  type: mongoose.Schema.Types.ObjectId, ref: 'Wallet' ,
    description :  type: String, maxlength: 40 ,
    comments    : String,
    isMasterKey :  type: Boolean, default: false ,
    date        : Date
);

【讨论】:

以上是关于猫鼬:更新字段,将对象推送到数组中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将元素推送到猫鼬中的数组

如何避免在对象内部创建对象并使用猫鼬将元素直接推送到快速数组中?

如何通过一次调用将一组对象推送到猫鼬中的数组中?

如何通过一次调用将一组对象推送到猫鼬中的数组中?

将对象推送到对象数组导致整个数组发生意外更改[重复]

从数组中获取对象并推送到新数组[重复]