0

私のユーザーコレクションには、このようなデータがあります

{ name:"steve" }, { name:"david" }, { name:"sana" }, { name:"robert" }

私のクエリはこのようなものです

 var myCollections= _database.GetCollection<RawBsonArray>("users");
 var query = Query.Matches("name", "Steve Sam Steward Savior Sana");
 myCollections.Find(query);

上記のクエリは、 "Steve Sam Steward Savior Sana"に一致するすべてのユーザー名を検索します。しかし、 「Steve Sam Steward Savior Sana」の任意の単語と一致するユーザー名が必要です

上記のクエリを逆に機能させるにはどうすればよいですか

期待される結果は { name:"steve" },{ name:"sana" }

ループを実行しましForEachたが、それが正しい方法かどうかはわかりません。

これが私が達成しようとしているものです

_users.Any(x => "Steve Sam Steward Savior Sana".ToLower().Contains(x.name.ToLower()));
4

2 に答える 2

0

以下を使用できます。

var usernames = new List<string>() {@"Steve", @"Sam", @"Steward", @"Savior", @"Sana"};
// regex token list
var tokens = new List<string>();
for (var i = 0; i < usernames.Count; i++)
{
    // create the regex format
    var userRegex = string.Format("^{0}", usernames[i]);
    tokens.Add(userRegex);
}
var searchByUsernameRegex = string.Join(@"|", tokens);
Collection.Find(Query.Matches("Username", new BsonRegularExpression(searchByUsernameRegex))).ToList();

また

// regex token list
var tokens = new List<string>();
for (var i = 0; i < users.Count; i++)
{
    // create the regex format
    var userRegex = string.Format("^{0}", users[i]);
    tokens.Add(userRegex);
}
// create regex to match the usernames
var regexes = tokens.Select(x => new Regex(x)).ToList();
// construct the query
var usersQuery = Query.In("Username", new BsonArray(regexes));
于 2014-03-27T22:41:26.553 に答える
0

$in必要なのはオペレーターだと思います。私は C# に詳しくありませんが、これはシェルで行う方法です。

db.users.find({"name":{$in:["Steve", "Sam", "Steward", "Savior", "Sana"]}})

これが、C# で同等のものを考え出すのに役立つことを願っています。

于 2014-03-27T00:31:34.180 に答える