2014-02-22 46 views
0

这是我在MongoDB中收集的一个集合的示例结构,同样在一个集合中也有一些60+个类似的记录。我们转而看到mongodb快速访问性能,但现在很难说简单的搜索花费了很多时间。我已经给出了搜索参数的索引。用于名称搜索(搜索参数MNG_FIRST_NAME,MNG_MIDDLE_NAME,MNG_LAST_NAME,MNG_ALIASIST.AKAFIRST_NAME,MNG_ALIASIST.AKALAST_NAME)。 请考虑是我遵循正确的方式与mongodb的方法。Mongodb性能问题与简单的搜索查询

请在下面找到我正在使用的代码示例和收集结构。使用

{ 
    "_id" : ObjectId("5308e2e1f525bc0f0472cbf6"), 
    "MNG_UID" : "1389120", 
    "MNG_CATEGORY" : "OFFICER", 
    "MNG_FIRST_NAME" : "JOHN", 
    "MNG_LAST_NAME" : "DOE", 
    "MNG_MIDDLE_NAME" : "MARK", 
    "MNG_CREATEDON" : "2010-11-19", 
    "MNG_UPDATEDON" : "2014-01-01", 
    "MNG_TITLE" : "Dr", 
    "MNG_REMARKS" : "", 
    "MNG_TYPE" : "WORLDCHECK", 
    "MNG_PROGRAMLIST" : [], 
    "MNG_IDLIST" : [], 
    "MNG_ALIASIST" : [ 
     { 
      "AKAUID" : "101", 
      "AKATYPE" : "ALIAS", 
      "AKACATEGORY" : "", 
      "AKAFIRST_NAME" : "JOHNNY TURA, DOE", 
      "AKALAST_NAME" : "" 
     }, 
     { 
      "AKAUID" : "102", 
      "AKATYPE" : "ALIAS", 
      "AKACATEGORY" : "", 
      "AKAFIRST_NAME" : "MARK TURA, DOE", 
      "AKALAST_NAME" : "" 
     } 
    ], 
    "MNG_ADDRESSLIST" : [ 
     { 
      "ADDRESSUID" : "", 
      "ADDRESS1" : "Dakar", 
      "ADDRESS2" : "Dakar", 
      "ADDRESS3" : "SENEGAL", 
      "ADDRESSCITY" : "Dakar", 
      "ADDRESSCOUNTRY" : "SENEGAL", 
      "ADDRESSPOCODE" : "", 
      "ADDRESSSTATE" : "Dakar" 
     } 
    ], 
    "MNG_NATIONALITYLIST" : [ 
     { 
      "NATUID" : "", 
      "NATCOUNTRY" : "ISRAEL", 
      "NATMAINENTRY" : "" 
     }, 
    { 
      "NATUID" : "", 
      "NATCOUNTRY" : "AMERICIAN", 
      "NATMAINENTRY" : "" 
     } 
    ], 
    "MNG_CITIZENSHIPLIST" : [], 
    "MNG_DOBLIST" : [], 
    "MNG_PLACEOBLIST" : [], 
    "MNG_ADDINFOLIST" : [] 
} 

代码中使用MongoDB的C#驱动

string MNG_REMTNAME = "JOHN"; 

    var collection = mongoDB.GetCollection<EMPLOYEES>("EMPLOYEES"); 

    if (!string.IsNullOrEmpty(MNG_REMTNAME)) 
    { 
     IMongoQuery MFName = new QueryDocument(); 
     MFName = Query.Or(Query.Matches("MNG_FIRST_NAME", MNG_REMTNAME.ToUpper()), 
       Query.Matches("MNG_MIDDLE_NAME", MNG_REMTNAME.ToUpper()), 
       Query.Matches("MNG_LAST_NAME", MNG_REMTNAME.ToUpper()), 
       Query.ElemMatch("MNG_ALIASIST", Query.Or(Query.Matches("AKAFIRST_NAME", 
MNG_REMTNAME.ToUpper()))) 
       ); 
    } 
    var colln = collection.Find(MFName).ToList(); 

请一些解决方案来提高性能有助于获得集合。

回答

0

更改线路

Query.ElemMatch("MNG_ALIASIST", Query.Or(Query.Matches("AKAFIRST_NAME", 
MNG_REMTNAME.ToUpper()))) 

这一个

Query.ElemMatch("MNG_ALIASIST", Query.EQ("AKAFIRST_NAME", MNG_REMTNAME.ToUpper())) 

也有记住,在MongoDB的阵列搜索是非常昂贵的,除非你有正确的指标。因此,请确保您的索引至少包含MNG_ALIASIST

考虑此字段http://docs.mongodb.org/manual/core/index-multikey/

+0

我已校正码sample..i'm搜索在阵列MNG_ALIASIST名称创建一个多键索引 - AKAFIRST_NAME,AKALAST_NAME。我也给了这些参数的索引。 – deepu

+0

那么,提高了它的性能呢? –

+0

nopes仍然需要时间...获得一场比赛也需要时间.. – deepu