【发布时间】:2017-10-25 06:35:51
【问题描述】:
我想知道如何比较 Mongoose 中的(嵌套)对象数组。
考虑到下面的数据,我想在name 属性匹配时得到结果。谁能帮我解决这个问题?
Organisation.find( {
$or: [
{ "category_list": { $in: cat_list } },
{ "place_topics.data": { $in: place_tops } }
]
}
)
假设这是存储在我的 MongoDB 中的数据:
"category_list": [
{
"id": "197750126917541",
"name": "Pool & Billiard Hall"
},
{
"id": "197871390225897",
"name": "Cafe"
},
{
"id": "218693881483234",
"name": "Pub"
}
],
"place_topics": {
"data": [
{
"name": "Pool & Billiard Hall",
"id": "197750126917541"
},
{
"name": "Pub",
"id": "218693881483234"
}
]
}
假设这些是我要比较的数组(几乎相同的数据):
let cat_list = [
{
"id": "197750126917541",
"name": "Pool & Billiard Hall"
},
{
"id": "197871390225897",
"name": "Cafe"
},
{
"id": "218693881483234",
"name": "Pub"
}
]
let place_tops = [
{
"name": "Pool & Billiard Hall",
"id": "197750126917541"
},
{
"name": "Pub",
"id": "218693881483234"
}
]
【问题讨论】:
-
以下是否属实?我们只有在以下情况下才有匹配: - 要比较的数组与它们对应的数组具有相同的长度; - 它们包含相同的 id 集; - id 相同的记录应该有相同的名称,其他字段可以不同。
-
其实MongoDB中存储的数据也包含一个字符串_id所以是假的。
-
是的,但是您写道您对比较名称感兴趣,所以我假设您想检查尽管匹配了 id,但名称是否相同(最新或 smth)。看来我误会了你。
-
没问题,我提供的数据不是实际存储的数据,实际存储的数据更像:
{ "_id": { "$oid": "5931bd880472150069e7c" }, "name": "Pool & Billiard Hall" }我应该存储数字 ID,但我没有,所以我必须按名称比较:/
标签: javascript node.js mongodb mongoose mongodb-query