Node.js 如何在mongodb中为深度嵌套数组编写更新查询?
嗨,我有一个模型Node.js 如何在mongodb中为深度嵌套数组编写更新查询?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,嗨,我有一个模型客户及其模式 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: Str
客户
及其模式
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.customerId的cardInfo)遍历元素({cardInfo:[]})
请帮助我编写查询,以便使用mongodb或mongoose添加客户卡。请尝试更新中的运算符,该运算符充当与查询文档匹配的第一个元素的占位符,使用时请确保cards
数组字段必须作为查询文档的一部分出现。在您的情况下,您希望将卡片
文档添加到卡片
数组中,但前提是卡片
不存在:
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) { ... });
请尝试更新中的运算符,该运算符充当与查询文档匹配的第一个元素的占位符,使用该运算符时,请确保cards
数组字段必须作为查询文档的一部分出现。在您的情况下,您希望将卡片
文档添加到卡片
数组中,但前提是卡片
不存在:
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) { ... });
请向我们展示完整的mongodb/mongoose请求示例。请向我们展示完整的mongodb/mongoose请求示例。这是我的查询,它无法运行
db.customers.update({“\u id”:ObjectId(“12345689”)},{“$push”):{“cardInfo”:{“customerId”:“25934285649875”},“cardInfo.$.cards:{cardId:“somecardd”,cardType:“type”,createdAt:new Date().toISOString(),isActive:true}}},{}
获取此错误:WriteResult({“errmsg”:“字段'cardInfo'必须是数组,但在文档{u id:ObjectId('12345689')}中是Object类型)
确保卡片数组字段必须作为查询文档的一部分出现,即db.customers.update({u id:ObjectId(“12345689”),“cardInfo.cards.cardd”:{“$nin”:[“somecardd”]},{“$push”:{“cardInfo”:{“customerId”:“25934285649875”},“cardInfo$.cards”:{cardd.toISOString(),isActive:true}}},{}这是我的查询,它不工作db.customers.update({u id:ObjectId(“12345689”)},{“$push:{“cardInfo”:{“customerId”:“25934285649875”},“cardInfo.$.cards:{cardd:“somecardd”,cardType:“type”,createdAt:new Date().toISOString(),isActive:true}},{}获取此错误:WriteResult({“errmsg”:“字段'cardInfo'必须是数组,但在文档{u id:ObjectId('12345689')}中属于Object类型)
确保卡片数组字段必须作为查询文档的一部分出现,即db.customers.update({u id:ObjectId(“12345689”),“cardInfo.cards.cardd”:{“$nin”:[“somecardd”]},{“$push”:{“cardInfo”:{“customerId”:“25934285649875”},“cardInfo$.cards”:{cardd.toISOString(),isActive:true}},{})