您好我有产品表及其数据如下所示
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ad"),
"type" : "product",
"product_name" : "product1",
"created_date" : "2016-10-06 19:36:30",
"display_areas" : [
{
"area" : "area1",
"order" : "11",
"price" : 10.0
},
{
"area" : "area2",
"order" : "11",
"valid" : 11.0
}
],
"user_deleted" : [
{
"area" : "area1",
"user" : "user1"
},
{
"area" : "area1",
"user" : "user2"
}
]
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ad"),
"type" : "product",
"product_name" : "product2",
"created_date" : "2016-10-06 19:36:30",
"display_areas" : [
{
"area" : "area1",
"order" : "11",
"price" : 10.0
},
{
"area" : "area2",
"order" : "11",
"valid" : 11.0
}
]
}
一般情况下,我想基于display_areas显示这些产品,我可以使用展开选项轻松地进行查询。但我想基于display_areas将它们显示给特定用户,而display_areas不会被用户删除。
在上面的示例中如果我必须在area1中显示user1的产品,我应该只获取product2的信息。因为,user1删除了product1的area1。
这是这种查询的最佳数据库结构吗?我也对结构的任何建议持开放态度。
提前致谢。
答案 0 :(得分:1)
这是一个浮现在脑海中的想法。您可以将user
移动到users
数组中的display_areas
数组中,然后移除user_deleted
数组。因此,product1
的新结构如下所示。
{
"_id": ObjectId("5870f1d9dd0ef6e62102e6ad"),
"type": "product",
"product_name": "product1",
"created_date": "2016-10-06 19:36:30",
"display_areas": [{
"area": "area1",
"order": "11",
"price": 10.0,
"users" : ["user1", "user2"]
}, {
"area": "area2",
"order": "11",
"valid": 11.0
}]
}
现在可以使用elemMatch
轻松查询结构。这样的事情。
db.collection.find({"display_areas":{"$elemMatch":{"area": "area1", "users":{$ne:"user1"}}}})