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我已经尝试过同样的方法。请参阅我在问题中提到的修改后的代码。这是我已经尝试过的。