C# WHERE条款SDB Mongo子文件

C# WHERE条款SDB Mongo子文件,c#,mongodb,azure,azure-cosmosdb,C#,Mongodb,Azure,Azure Cosmosdb,使用Azure CosmosDB Mongo 我在文档和子文档中有文本字段。我希望能够搜索到 使用Contains可以很好地处理父文档属性。但似乎根本不看孩子。甚至不返回任何错误 文档: { "TextField1": "this will be found in search", "Comments": [{ "Comment": "amazing post, let's see if this can be foundtoo", }, {

使用Azure CosmosDB Mongo

我在文档和子文档中有文本字段。我希望能够搜索到

使用
Contains
可以很好地处理父文档属性。但似乎根本不看孩子。甚至不返回任何错误

文档:

 {
     "TextField1": "this will be found in search",
     "Comments": [{
         "Comment": "amazing post, let's see if this can be foundtoo",
     }, {
         "Comment": "thanks",
     }]
 }
搜索:

var postFilter = Builders<MyObject>.Filter.Where(p => p.TextField1.ToLowerInvariant().Contains(searchText.ToLowerInvariant())) |
                 Builders<MyObject>.Filter.Where(p => p.Comments.Any(pc => pc.Comment.ToLowerInvariant().Contains(searchText.ToLowerInvariant())));

var posts = await Posts.Find(postFilter).ToListAsync();
var postFilter=Builders.Filter.Where(p=>p.TextField1.ToLowerInvariant().Contains(searchText.ToLowerInvariant())|
Builders.Filter.Where(p=>p.Comments.Any(pc=>pc.Comment.ToLowerInvariant().Contains(searchText.ToLowerInvariant()));
var posts=await posts.Find(postFilter.ToListAsync();
如果我将上述代码与搜索“find”一起使用。它将返回文档

如果我将其与搜索“foundtoo”一起使用。它不会归还任何东西


PS:我尝试过使用
文本
,但它不受支持,并且作为错误返回。

Cosmos Mongo Db可能没有将整个命令作为本机MongoDB实现。我尝试了你提到的代码,也得到了与你提到的相同的结果

使用“包含”可以很好地处理父文档属性。但似乎根本不看孩子。甚至不返回任何错误

请尝试使用以下代码执行此操作。我在我这边测试,它工作正常

var filterResult = collection.Find(Builders<MyObject>.Filter.ElemMatch("Comments", Builders<Mydata>.Filter.Where(p=>p.Comment.ToLowerInvariant().Contains(searchText.ToLowerInvariant())))).ToList();
3.使用以下代码进行测试

  string connectionString = "connection string";
  MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
  settings.SslSettings = new SslSettings { EnabledSslProtocols = SslProtocols.Tls12 };
  var mongoClient = new MongoClient(settings);
  var searchText = "foundtoo";
  var db = mongoClient.GetDatabase("dbname");
  var collection = db.GetCollection<MyObject>("collectionName");
  var mydata1 = new Mydata {Comment = "Thank you"};
  var mydata2 = new Mydata {Comment = "amazing post, let's see if this can be foundtoo"};
  var list = new List<Mydata> {mydata1, mydata2};
  Mydata[] mydatas = {mydata1,mydata2};
  collection.InsertOneAsync(new MyObject
            {
                Id = Guid.NewGuid().ToString(),
                TextField1 = "this will be found in search",
                Comments = mydatas

            }).Wait();
   var filterResult = collection.Find(Builders<MyObject>.Filter.ElemMatch("Comments", Builders<Mydata>.Filter.Where(p=>p.Comment.ToLowerInvariant().Contains(searchText.ToLowerInvariant())))).ToList();
string connectionString=“连接字符串”;
MongoClientSettings=MongoClientSettings.FromUrl(新的MongoUrl(connectionString));
settings.SslSettings=新的SslSettings{EnabledSslProtocols=SslProtocols.Tls12};
var mongoClient=新的mongoClient(设置);
var searchText=“foundtoo”;
var db=mongoClient.GetDatabase(“dbname”);
var collection=db.GetCollection(“collectionName”);
var mydata1=新的Mydata{Comment=“Thanke you”};
var mydata2=newmydata{Comment=“惊人的帖子,让我们看看这是否也可以找到”};
var list=新列表{mydata1,mydata2};
Mydata[]mydatas={mydata1,mydata2};
collection.InsertOneAsync(新的MyObject
{
Id=Guid.NewGuid().ToString(),
TextField1=“这将在搜索中找到”,
Comments=mydatas
}).Wait();
var filterResult=collection.Find(Builders.Filter.ElemMatch(“Comments”,Builders.Filter.Where(p=>p.Comment.ToLowerInvariant().Contains(searchText.ToLowerInvariant()))).ToList();

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="MongoDB.Bson" version="2.4.4" targetFramework="net461" />
  <package id="MongoDB.Driver" version="2.4.4" targetFramework="net461" />
  <package id="MongoDB.Driver.Core" version="2.4.4" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
</packages>


感谢您的详细回复。我试试看。你是个明星!
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="MongoDB.Bson" version="2.4.4" targetFramework="net461" />
  <package id="MongoDB.Driver" version="2.4.4" targetFramework="net461" />
  <package id="MongoDB.Driver.Core" version="2.4.4" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
</packages>