1

嘿,那么我如何查询属于用户朋友集合的特定数组项。

这是查询:

Friend.find({userId: req.signedCookies.userid, 'friendStatus.labels': req.body.searchLabels
            }, function(err, users) {

这个细分是 userId 是一种查找已登录用户文档的方法,然后我只想访问嵌套在friendStatus数组内的对象中的标签数组内的标签......

这是一个文档示例:

> db.friends.find({'firstName': "test3"}).pretty()
{
        "__v" : 0,
        "_id" : ObjectId("520a4944c24d995410000008"),
        "accepted_notifications" : true,
        "added_notifications" : true,
        "firstName" : "test3",
        "firstNameTrue" : "test3",
        "friendStatus" : [
                {
                        "favorites" : 1,
                        "fuId" : ObjectId("520a4905c24d995410000001"),
                        "labels" : [
                                "new",
                                "old"
                        ],
                        "notes" : "He likes me",
                        "status" : 3
                },
                {
                        "fuId" : ObjectId("520a4925c24d995410000004"),
                        "labels" : [ ],
                        "notes" : "sadwa",
                        "status" : 3
                }
        ],
        "lastName" : "test3s",
        "lastNameTrue" : "TEST3s",
        "notifications" : 0,
        "userId" : ObjectId("520a4944c24d995410000007")
}

并且当我使用回调用户时,当前查询返回整个文档,但我只想从中提取匹配标签:

{
                            "favorites" : 1,
                            "fuId" : ObjectId("520a4905c24d995410000001"),
                            "labels" : [
                                    "new",
                                    "old"
                            ],
                            "notes" : "He likes me",
                            "status" : 3
                    },
4

1 回答 1

5

您可以使用聚合框架来实现这一点,特别是$matchand$project运算符。$match像常规查询一样匹配文档,并$project允许您选择要在查询输出中返回的字段。您的设置的聚合查询可能如下所示:

Friend.aggregate([{$match: {userId: req.signedCookies.userid,'friendStatus.labels': req.body.searchLabels}}, {$project: {'friendStatus.labels': 1}}])

更多文档可以在这里找到:http: //docs.mongodb.org/manual/reference/aggregation/operators/

于 2013-09-16T15:51:45.830 回答