我的Mongo系列有两个文件
masterfilesales <- bind_rows(file.list, .id="id") %>% mutate(id = substr(id,1,4))
这是我用来获取的查询,只有当user_id为2&amp;状态为“UNSEEN”。
{
"_id":ObjectId("567168393d5c6cd46a00002a"),
"type":"SURVEY",
"description":"YOU HAVE AN UNANSWERED SURVEY.",
"user_to_notification_seen_status":[
{
"user_id":1,
"status":"UNSEEN",
"time_updated":1450272825
},
{
"user_id":2,
"status":"SEEN",
"time_updated":1450273798
},
{
"user_id":3,
"status":"UNSEEN",
"time_updated":1450272825
}
],
"feed_id":1,
"time_created":1450272825,
"time_updated":1450273798
}
理想情况下,上述查询不应检索结果,但会返回结果。如果我提供无效ID或无效状态,则不会返回任何记录。
答案 0 :(得分:0)
您误解了查询的工作原理。它与您的文档匹配,因为user_to_notification_seen_status包含user_id:2和status:UNSEEN的元素。
您可以使用aggregation framework来获得所需结果。展开数组然后匹配两个条件。这样,您只能获得满足两个条件的数组元素的未展开文档。
在mongo shell中运行(或转换为PHP等效项)。另外,将YourCollection更改为您的实际集合名称:
db.YourCollection.aggregate([ { $unwind: "$user_to_notification_seen_status" }, { $match: { "user_to_notification_seen_status.status": "UNSEEN", "user_to_notification_seen_status.user_id": 2 } } ] );
这将不会返回任何记录,但如果您将id更改为3,则会返回一个。
答案 1 :(得分:0)
Try:
$query = array(
array('$unwind' => '$user_to_notification_seen_status'),
array(
'$match' => array('user_to_notification_seen_status.status' => 'UNSEEN', 'user_to_notification_seen_status.user_id' => 2),
),
);
$cursor = $notification_collection->aggregate($query);