我想检索与查询

时间:2017-06-22 14:57:59

标签: mongodb

请参阅以下文件

{
    "_id" : ObjectId("594b9eb9e1b22e09f8af00ee"),
    "Name" : "Master List",
    "UserId" : ObjectId("594b9eb9e1b22e09f8af00ed"),
    "Items" : [ 
        {
            "_id" : ObjectId("59485d9d0fd04d1294e06766"),
            "Title" : "Muscle Milk Protein",
        }, 
        {
            "_id" : ObjectId("59485d9d0fd04d1294e06772"),
            "Title" : "Baby Macro Organic 120g",
        }, 
        {
            "_id" : ObjectId("59485d9d0fd04d1294e06780"),
            "Title" : "Fruit Bread Soft Strap",
        }
    ]
}

从上面的文档中,我想要基于搜索字符串的结果,例如:" /。 Mus。 /"我应该得到以下结果,但我得到了上面的整个项目细节

{
    "_id" : ObjectId("594b9eb9e1b22e09f8af00ee"),
    "Name" : "Master List",
    "UserId" : ObjectId("594b9eb9e1b22e09f8af00ed"),
    "Items" : [ 
        {
            "_id" : ObjectId("59485d9d0fd04d1294e06766"),
            "Title" : "Muscle Milk Protein",
        }
    ]
}

我尝试了以下查询,但没有一个从Items子文档中获取匹配的标题

查询1: db.getCollection('List').find({'UserId': new ObjectId("594b9eb9e1b22e09f8af00ed"), 'Items': {'$elemMatch': {'Title': <code>{$regex:'.*uscle. *'}}}})

查询2: db.getCollection('List').find({'UserId': new ObjectId("594b9eb9e1b22e09f8af00ed"), 'Items.Title': <code> {$regex:'.*Mus. *'}})

你能帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用aggregation framework $unwind,“解包”,嵌套数组。

db.getCollection.aggregate([
    {
      $unwind:"$Items"
    },
    {
      $match: {
        "Items.title": {
          regex: /yourPattern/
        }
      }
    }
])

希望它有所帮助!聚合在MongoDB中真的很棒。