Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 Mongoose在Mongoose模式中从对象内部的数组中提取元素时会产生奇怪的结果_Node.js_Mongodb_Npm_Mongoose - Fatal编程技术网

Node.js Mongoose在Mongoose模式中从对象内部的数组中提取元素时会产生奇怪的结果

Node.js Mongoose在Mongoose模式中从对象内部的数组中提取元素时会产生奇怪的结果,node.js,mongodb,npm,mongoose,Node.js,Mongodb,Npm,Mongoose,我有一个猫鼬模式,看起来像:- { "_id" : ObjectId("some_id"), "repDet" : { "devIDs" : [ "dev1_B37", "dev2_B38", "dev3_B26" ], "sensors" : [ "D30" ], "triggers" : [

我有一个猫鼬模式,看起来像:-

{ 
    "_id" : ObjectId("some_id"), 
    "repDet" : {
        "devIDs" : [
            "dev1_B37", 
            "dev2_B38", 
            "dev3_B26"
        ], 
        "sensors" : [
            "D30"
        ], 
        "triggers" : [
            "initial"
        ]
}
{ 
    "_id" : ObjectId("some_id"), 
    "repDet" : {
        "devIDs" : "dev2_B38",
        "sensors" : [
            "D30"
        ], 
        "triggers" : [
            "initial"
        ]
}
我想从对象“repDet”内的数组“devds”中提取“dev2_B38”。 以下命令适用于mongo db:-

schedules.updateOne({ added_by: currentUser, "repDet.devIDs": "dev2_B38" },{$pull : {"repDet.devIDs": "dev2_B38"}})
非常好

但同样的命令在猫鼬身上不起作用。我试过的猫鼬版本是 5.0.18 & 5.7.11. 它所做的是从数组中删除所有其他设备,只保留“dev_B38”,并将“设备”从数组转换为字符串。输出如下所示:-

{ 
    "_id" : ObjectId("some_id"), 
    "repDet" : {
        "devIDs" : [
            "dev1_B37", 
            "dev2_B38", 
            "dev3_B26"
        ], 
        "sensors" : [
            "D30"
        ], 
        "triggers" : [
            "initial"
        ]
}
{ 
    "_id" : ObjectId("some_id"), 
    "repDet" : {
        "devIDs" : "dev2_B38",
        "sensors" : [
            "D30"
        ], 
        "triggers" : [
            "initial"
        ]
}
我试过更新一次,更新一次,查找一次,重复所有这些。 我还试着修改它,如:-

schedules.updateOne({ added_by: currentUser, "repDet.devIDs": "dev2_B38" },{$pull : {"repDet" {"devIDs": "dev2_B38"}}}) 
但它还是给了我同样的结果

确切的模式是:-

var scheduleSchema = new mongoose.Schema({
    title: { type: String },
    message: { type: String },

    devID: { type: String },
    sensors: [{
      sensorId: String,
      sensorName: String,
      unit: String
    }],

    selectedContacts: [{
      _id: { type: mongoose.Schema.Types.ObjectId, ref: 'Contact' },
      name: String,
      mobiles: [Number],
      emails: [String]
    }],
    repDet: { type: Object },
    invocationTime: { type: String },
    invocationDays: Array,
    startTime: { type: String },
    endTime: { type: String },
    interval: { type: Number },
    repeat: { type: Number },
    url: String
  });
请帮我做这个。 多谢各位


试试这个

你只想正确地拉取那个数组吗?我只想从数组中拉取一个开发id。@BilalS10你的语法在这里改变了
{“repDet”{“devIDs”:“dev2_B38”}
??是否应该是
{“repDet.devIDs”:“dev2_B38”}
您需要使用绝对对象结构。所以试着这样做
schedules.updateOne({added_by:currentUser,“repDet.devIDs”:“dev2_B38”},{$pull:{“repDet”:{devIDs:“dev2_B38”}}})
@ash我已经尝试过同样的方法。请参阅我在问题中提到的修改后的代码。这是我已经尝试过的。