$匹配条件$和对象mongodb的内部数组

时间:2017-05-05 14:06:04

标签: node.js mongodb

我在Mongo DB中有一个文档,其结构如下:

{
    "username" : "John Doe",
    "userdocument" : "1026254745",
    "user_id" : "6QH70tZrPbTDvqmOtUCcT9",
    "createAt" : ISODate("2017-03-22T22:01:15.808Z"),
    "network_clients" : [ 
        {
            "client_id" : "6XvzpJ2IwnVT66pEkKU7E3",
            "_id" : ObjectId("58d2f47dc9a288179cecb996"),
            "usertype" : "client"
        }, 
        {
            "client_id" : "07nPfV5TEH1qTLDBK2xIMe",
            "_id" : ObjectId("58d321aa26417b20f34bc7e7"),
            "usertype" : "client"
        }, 
        {
            "client_id" : "3b45WntXG6KMX12qSEyMGc",
            "_id" : ObjectId("590baf16ea97a217e4834370"),
            "usertype" : "supplier"
        }
    ],
    "useravatar" : "https://pos-lisa.s3.amazonaws.com/useravatar-1493859018209.jpg",
    "comments" : "",
}

我喜欢使用" client_id" " usertype"领域。我在使用mongoose的mongoDB中尝试以下内容:

User.aggregate({ $match:
    { $and: 
        [
            { 'network_clients.client_id': clientId }, 
            { 'network_clients.usertype': userType }
        ] 
    }
}).sort({ username: 'ascending' })

在我的应用程序中,用户可以是我的一个客户的供应商,同一个用户可以是我的其他客户的客户,但是通过这种实现,mongo总是发送给我的用户,无论他是否是客户或供应商,所以我的客户在"客户列表中看到用户"在供应商列表"

如何在本文档的内部数组中创建过滤器?提前谢谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否正在按照你想要的方式跟踪你。但也许这很接近它:

User.aggregate({$project:{'username':1,'network_clients':1}},
{$unwind:'$network_clients'},
{$match:{'network_clients.client_id':clientId,'network_clients.usertype':userType}},
{$sort:{username:1}})