Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在mongodb中为深度嵌套数组编写更新查询?_Node.js_Mongodb_Mongoose - Fatal编程技术网

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}},{})