【发布时间】:2021-06-03 05:34:50
【问题描述】:
我有如图所示的文件
[
{
"Users": [
{
"Name": "Kartikey Vaish",
"_id": "1",
},
{
"Name": "Witcher Proxima",
"_id": "2",
}
],
"_id": "12",
},
{
"Users": [
{
"Name": "Witcher Proxima",
"_id": "2",
},
{
"Name": "Saga",
"_id": "4",
}
],
"_id": "13",
}
]
我想搜索那些用户数组具有特定 ID 的文档
例如如果
ID == 1 // should return
[
{
"Users": [
{
"Name": "Kartikey Vaish",
"_id": "1",
},
{
"Name": "Witcher Proxima",
"_id": "2",
}
],
"_id": "12",
}
]
ID == 2 // should return
[
{
"Users": [
{
"Name": "Kartikey Vaish",
"_id": "1",
},
{
"Name": "Witcher Proxima",
"_id": "2",
}
],
"_id": "12",
},
{
"Users": [
{
"Name": "Witcher Proxima",
"_id": "2",
},
{
"Name": "Saga",
"_id": "4",
}
],
"_id": "13",
}
]
ID == 4 // should return
[
{
"Users": [
{
"Name": "Kartikey Vaish",
"_id": "1",
},
{
"Name": "Saga",
"_id": "4",
}
],
"_id": "13",
}
]
正如您从上面看到的,我的查询应该只返回那些“用户”数组包含具有给定 ID 的对象的对象。我试过了,但它不起作用。
const chats = await Chats.find({
Users: { $elemMatch: { _id: "1" } },
});
// this returns an empty array
const chats = await Chats.find({
Users: { $elemMatch: { Name: "Kartikey Vaish" } },
});
// this returns
[
{
"Users": [
{
"Name": "Kartikey Vaish",
"_id": "1",
},
{
"Name": "Witcher Proxima",
"_id": "2",
}
],
"_id": "12",
}
]
我在这里做错了什么? 和_id参数有关系吗?
编辑: 我的聊天模式如下所示 -
const Chats = mongoose.model(
"Chats",
new mongoose.Schema({
Users: {
type: Array,
required: true,
default: [],
},
})
);
【问题讨论】:
-
您的查询是正确的。检查您的架构一次。如果可能,请发布
chats架构。 -
@DheemanthBhat 我在问题中添加了聊天模式
-
你为什么要搞乱默认的
ObjectId,即_id字段?如果要捕获用户 ID,则创建一个Number数据类型的新字段id(或其他)。
标签: arrays mongodb mongoose mongodb-query