我有一个架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var MySchema = new Schema({
Theme: { type: String },
Style: { type: String },
Brand: { type: String },
UpdatedInfo: [
{
_id:false,
ThisDate: { type: String },
NewInfo: {type: String },
OriginalInfo: {type: String }
}
]
}, { versionKey: false });
然后我做了更新:
MySchema.update({ Theme: MyTheme }, {
$addToSet: {
UpdatedInfo: {
ThisDate: TheDate,
NewInfo: TheNewInfo,
OriginalInfo: TheOriginalInfo
},
}
},function (err, result) {
next(err,result);
});
即使UpdatedInfo
和TheDate
在TheNewInfo
的新元素中相同,该查询也会为每个新TheOriginalInfo
向UpdatedInfo
数组添加一个新元素}。
如果UpdatedInfo
从NewInfo
数组元素中的NewInfo
更改为{{}},我想要的是向UpdatedInfo
添加新元素 {1}}约会。
现在,ThisDate
数组如下所示:
UpdatedInfo
如果"UpdatedInfo" : [
{
"ThisDate" : "12/15/2015",
"NewInfo" : "12 500:-",
"OriginalInfo" : "15 000:-"
},
{
"ThisDate" : "12/16/2015",
"NewInfo" : "12 500:-",
"OriginalInfo" : "15 000:-"
},
{
"ThisDate" : "12/17/2015",
"NewInfo" : "12 500:-",
"OriginalInfo" : "15 000:-"
}
]
从一开始就是空的,那么它应该添加第一个元素,即:
UpdatedInfo
有可能吗? 最诚挚的问候
答案 0 :(得分:1)
使用$elemMatch
检查与TheOriginalInfo匹配的元素是否已将NewInfo过时,同时忽略ThisDate:
MySchema.update(
{
UpdatedInfo: {
$elemMatch: {
OriginalInfo: TheOriginalInfo,
NewInfo: {$ne: TheNewInfo}
}
}
},
{
$set: {
"UpdatedInfo.$.NewInfo": TheNewInfo,
"UpdatedInfo.$.ThisDate": TheDate
}
}
);
了解$ (update)。
如果您需要与数组或集合进行高级互动,我建议您将其移至某个集合。
MongoDB使用集合比使用数组做得更多。