您好我有一个模型Customer
及其架构
var customerSchema = new Schema({
name: {type: String, required:true, trim: true, index: true, default: null, sparse: true},
cardInfo: { type: [cardInfoSchema]}
})
var cardInfoSchema = new Schema({
customerId : { type: String, required: true, index: true, unique: true,trim : true, sparse: true},
cards: { type:[cardsSchema], default:[]}
}, {_id: false});
var cardsSchema = new Schema({
cardType : { type: String, required: true, default: null, trim : true },
isActive : { type: String, required: true, trim: true }, //0: not active, 1: active
cardId : { type: String, required: true, trim: true },
createdAt : { type: Date, default: Date.now, required: true }
})
我想添加多张客户卡,所以我正在使用此
var dataToSet = {
'cardInfo.customerId': '25934285649875',
$push: {
'cardInfo.cards': {
cardId: 'somecardid,
cardType: 'type',
createdAt: new Date().toISOString(),
isActive: true
}
}
};
但我收到了这个错误。
不能使用部分(cardInfo.cinomerId的cardInfo)来遍历元素({cardInfo:[]})
请帮我编写查询,使用mongodb或mongoose添加客户卡。
答案 0 :(得分:0)
在您的更新中尝试 positional $
运算符,该运算符充当与查询文档匹配的第一个元素的占位符,当您使用它时,请确保cards
数组字段必须作为查询文档的一部分出现。在您的情况下,您需要将card
文档添加到'cards'
数组中,但仅当cardId
不存在时才会添加:
var query = {
"cardInfo.cards.cardId": { "$nin": ["somecardid"] }
};
var update = {
"$push": {
"cardInfo": { "customerId": "25934285649875" },
"cardInfo.$.cards": {
cardId: "somecardid",
cardType: "type",
createdAt: new Date().toISOString(),
isActive: true
}
}
};
Customer.update(query, update, function (err, result) { ... });