programing

MongoDBC# 문자열에서 '좋아요' 쿼리

stoneblock 2023. 7. 3. 22:31

MongoDBC# 문자열에서 '좋아요' 쿼리

저는 공식 mongodbc# 드라이버를 사용하고 있습니다.나는 SQL과 유사한 mongodb를 쿼리하고 싶습니다. 비슷한 것.db.users.find({name:/Joe/}c# 드라이버

c# 쿼리는 다음과 같이 표시됩니다.

Query.Matches("name", BsonRegularExpression.Create(new Regex("Joe")));

업데이트:

@RoberStam 제안에 따르면 이를 위한 더 간단한 방법이 있습니다.

Query.Matches("name", "Joe") 

c# 드라이버 2.1(MongoDB 3.0)의 경우

var collection = database.GetCollection<BsonDocument>("<<name of the collection>>");

var filter = Builders<BsonDocument>.Filter.Regex("name", new BsonRegularExpression("Joe"));

var result = await collection.Find(filter).ToListAsync();

c# 드라이버 2.2(MongoDB 3.0)의 경우

var filter = new BsonDocument { { parameterName, new BsonDocument { { "$regex", value }, { "$options", "i"} } } }

var result = collection.Find(filter).ToList();

MongoDBC# 드라이버에는 사용할 수 있는 BsonRegex 유형이 있습니다.

정규식이 SQL에 가장 가깝습니다.LIKE진술.

접두사가 붙은 정규식은 다음과 같이 인덱스를 사용할 수 있습니다./^Joe/색인을 사용할 것입니다./Joe/하지 않을 것이다.

@Sridhar 덕분에 -에게 효과가 있었던 비슷한 접근법.

public List<SearchModel> GetSearchResult(string searchParam) => _collection.Find(new BsonDocument { { "Datetime", new BsonDocument { { "$regex", searchParam }, { "$options", "i" } } } }).ToList(); // Search DateTime "Like"

Mongodb 문서의 속성에서 변수 'textToSearch'의 값을 검색해야 한다고 가정합니다.

예:우리는 모든 기록에서 매니저를 검색해야 합니다.JobModel.Title포함하다manager.그것은textToSearch=manager기록에 의하면(textToSearch문자열 유형입니다.저는 답변의 마지막에 정규식을 몇 개 추가했습니다.textToSearch에 포함된 텍스트를 다루려면 textToSearch는 몇 가지 시나리오로 시작합니다.)

동등한 C# 코드:

Note: I have also shown how you can append to your existing filter, ignore it if not required.

var mongoBuilder = Builders<BsonDocument>.Filter;
var filter = mongoBuilder.Eq(y => y.JobModel.Category, "full time");

if (!string.IsNullOrEmpty(textToSearch))
{
    textToSearch = "/.*" + textToSearch + ".*/i"; // this regex will search all the records which contains textToSearch and ignores case
    filter = filter & mongoBuilder.Regex(y => y.JobModel.Title, new BsonRegularExpression(textToSearch));
}                

동등한 Mongo 쿼리 코드:

db.jobs.find({ "JobModel.Category" : "full time", 
"JobModel.Title" : /.*manager.*/i })  

일부 유용한 정규식:

  • 이 regex는 textToSearch를 포함하고 대소문자를 무시하는 모든 레코드를 검색합니다. textToSearch = "/.*" + textToSearch + ".*/i";
  • 이 정규식은 textToSearch로 시작하고 대소문자를 무시하는 모든 레코드를 검색합니다. textToSearch = "/^" + textToSearch + "/i";
  • 이 정규식은 textToSearch로 시작하는 모든 레코드를 검색하고 대소문자를 무시하지 않습니다. textToSearch = "/.*" + textToSearch + ".*/";

언급URL : https://stackoverflow.com/questions/8382307/mongodb-c-sharp-query-for-like-on-string