在 Mongoose 的同一文档中查询 3 个不同嵌套数组中的字段?
Query the fields in 3 different nested arrays in same document in Mongoose?
下面是我的 Schema 设计
const Schema1 = mongoose.Schema({
_id: false,
id: { type: mongoose.Schema.Types.ObjectId,
ref: 'UserinfoSchema'
},
name: { type: String , default: null },
from: { type: Date, default: Date.now }
})
const ProfileSchema = mongoose.Schema({
profilename:{
type: String,
required: true
},
list:{
acceptedList:[ Schema1 ],
requestedList:[ Schema1 ],
pendingList:[ Schema1 ]
}
})
我想构建一个查询,查询所有嵌套数组(即 acceptedList、requestedList、pendingList)并查明 id 是否存在,如果 id 不存在于任何数组中,则更新 requestedList列表。
任何技术都有帮助。性能是关键。
您可以使用 $or
运算符来做到这一点:
db.Collection.update({
$or: {
"list.acceptedList": {$nin: [your_id]},
"list.requestedList": {$nin: [your_id]},
"list.pendingList": {$nin: [your_id]}
}
}, {
$addToSet: {
"list.requestedList": your_id
}
});
带有[your_id]的$nin
运算符检查你的id是否不在3个数组中,你必须使用[]因为它只允许数组。
因此,在您的 javascript 代码中,当用户接受请求时,您可以使用此查询(您必须先获取要插入到 acceptedList 中的数据):
db.Collection.update({
_id: collection_id,
"list.requestedList": request_id
}, {
$pull: {
"list.requestedList": your_id // I re use what i give to you
},
$addToSet: {
"list.acceptedList": your_id // or what you want
}
})
下面是我的 Schema 设计
const Schema1 = mongoose.Schema({
_id: false,
id: { type: mongoose.Schema.Types.ObjectId,
ref: 'UserinfoSchema'
},
name: { type: String , default: null },
from: { type: Date, default: Date.now }
})
const ProfileSchema = mongoose.Schema({
profilename:{
type: String,
required: true
},
list:{
acceptedList:[ Schema1 ],
requestedList:[ Schema1 ],
pendingList:[ Schema1 ]
}
})
我想构建一个查询,查询所有嵌套数组(即 acceptedList、requestedList、pendingList)并查明 id 是否存在,如果 id 不存在于任何数组中,则更新 requestedList列表。
任何技术都有帮助。性能是关键。
您可以使用 $or
运算符来做到这一点:
db.Collection.update({
$or: {
"list.acceptedList": {$nin: [your_id]},
"list.requestedList": {$nin: [your_id]},
"list.pendingList": {$nin: [your_id]}
}
}, {
$addToSet: {
"list.requestedList": your_id
}
});
带有[your_id]的$nin
运算符检查你的id是否不在3个数组中,你必须使用[]因为它只允许数组。
因此,在您的 javascript 代码中,当用户接受请求时,您可以使用此查询(您必须先获取要插入到 acceptedList 中的数据):
db.Collection.update({
_id: collection_id,
"list.requestedList": request_id
}, {
$pull: {
"list.requestedList": your_id // I re use what i give to you
},
$addToSet: {
"list.acceptedList": your_id // or what you want
}
})