Mongodb mongoose中如何从基于id的对象数组中获取一个对象
我有这样的数据:Mongodb mongoose中如何从基于id的对象数组中获取一个对象,mongodb,mongoose,Mongodb,Mongoose,我有这样的数据: { "global": { "summaryNotificationSchedule": { "weekDay": ["wednesday"] } }, "userEmail": "test1@gmail.com", "environments": [
{
"global": {
"summaryNotificationSchedule": {
"weekDay": ["wednesday"]
}
},
"userEmail": "test1@gmail.com",
"environments": [
{
"userPreference": {
"summaryNotificationSchedule": {
"weekDay": ["friday"]
}
},
"envId": "u1"
},
{
"userPreference": {
"summaryNotificationSchedule": {
"weekDay": ["tuesday"],
}
},
"envId": "u2"
}
]
}
我需要基于envId
从environments
数组中获取userPreference
对象
尝试此操作,但返回的是完整数组,但我需要返回数组中的对象,即userPreference
const envData = await preferencesModel.findOne({ userEmail, "environments.envId": envId }, { 'environments.$.envId': envId }).lean();
可以使用位置运算符。但要小心使用 工作 更新1 输出如您所期望的那样
[
{
$project: {
environments: {
$filter: {
input: "$environments",
cond: {
$eq: [
"$$this.envId",
"u1"
]
}
}
}
}
},
{
$project: {
userPreference: {
$ifNull: [
{
$arrayElemAt: [
"$environments.userPreference",
0
]
},
{}
]
}
}
}
]
工作尝试以下几点: 查找查询:
db.collection.findOne(
{
用户电子邮件:“test1@gmail.com",
},
{
环境:{
$elemMatch:{
envId:“u1”
}
}
}
)
聚合管道:
db.collection.aggregate([
{
$match:{
用户电子邮件:“test1@gmail.com"
}
},
{
$set:{
环境:{
$first:{
$filter:{
输入:“$environments”,
条件:{$eq:[“$$this.envId”,“u1”]}
}
}
}
}
},
{
$replaceWith:“$environments.userPreference”
}
])
等待首选项model.findOne({userEmail,“environments.envId”:envId},{environments.userPreference.$”:1})
它仍然返回数组,您需要摘要通知时间表
?是的,但我只需要返回对象:{“userPreference”:{“摘要通知时间表”:{“工作日”:[“星期二]}
这对您有帮助吗?
[
{
$project: {
environments: {
$filter: {
input: "$environments",
cond: {
$eq: [
"$$this.envId",
"u1"
]
}
}
}
}
},
{
$project: {
userPreference: {
$ifNull: [
{
$arrayElemAt: [
"$environments.userPreference",
0
]
},
{}
]
}
}
}
]