考慮以下存盤為檔案的物件結構:
public class Foo
{
public string Id { get; set; }
public List<FooBar> Bars { get; set; }
// ...
}
public class FooBar
{
public string uid { get; set; }
// ...
}
我有一個字串陣列:
var ArrayOfUid = ["STK-00112","STK-00117","STK-00113","STK-00114"]
我想從哪里得到的所有產品FooBar.uid中ArrayOfUid
所以最后我得到了這樣的產品串列,沒有重復
在 MongoDb 端查詢:
db.collection.find({
"foobar.uid": {
$in: [
"STK-00113",
"STK-00117",
"STK-00113",
"STK-00114"
]
}
})
有沒有辦法用字串陣列來做到這一點?目前我只能用一個給定的字串來實作它:
var findFluent = collection.Find(Builders<Foo>.Filter.ElemMatch(
foo => foo.Bars,
foobar => foobar.uid == "STK-00113"));
這將回傳具有
foobar.uid=“STK-00113”
有沒有辦法遍歷字串陣列并回傳所有物件的串列?
uj5u.com熱心網友回復:
您可以設定filter與BsonDocument物件,如下:
string[] uids = new string[] { "STK-00113", "STK-00117", "STK-00113", "STK-00114" };
FilterDefinition<Foo> filter = new BsonDocument(
"foobar.uid",
new BsonDocument(
"$in",
BsonArray.Create(uids)
)
);
var findFluent = collection.Find(filter);
或者
撰寫 MongoDB 查詢并反序列化為BsonDocument.
var query = @"{
'foobar.uid': {
$in: [
'STK-00113',
'STK-00117',
'STK-00113,
'STK-00114'
]
}
}";
var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(query);
var findFluent = collection.Find(filter);
僅供參考,您可以使用 MongoDB Compass將 Query 匯出為 C# Language。
uj5u.com熱心網友回復:
var range = new[]
{
"STK-00113",
"STK-00117",
"STK-00113",
"STK-00114"
};
var client = new MongoClient();
var db = client.GetDatabase("d");
var coll = db.GetCollection<Foo>("c");
var filter = Builders<Foo>.Filter.Where(foo => foo.Bars.Any(b => range.Contains(b.uid)));
var result = coll.Find(filter).ToList();
生成的查詢將是:
{
"find": "c",
"filter": {
"Bars": {
"$elemMatch": {
"uid": {
"$in": ["STK-00113", "STK-00117", "STK-00113", "STK-00114"]
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317081.html
標籤:C# asp.net MongoDB 林克 mongodb-.net-驱动程序
上一篇:[抽象類]型別的介面屬性可以在C#中實作為具體類嗎?
下一篇:如何計算陣列json中的值
