Я хотел бы сделать запрос в C# в MongoDB и показать результат в сетке данных. В конвейере моего метода запроса я сначала хочу отфильтровать год. Тем не менее, в моей базе данных MongoDB нет значения только для года. Я только получил значения даты. Поэтому я хотел использовать регулярное выражение для фильтрации года по значению даты. Ключ для этого значения даты Bestelldatum
.
Я попробовал следующее регулярное выражение, которое я нашел в документации MongoDB, но оно не работает. Это дает мне ошибку ($regexMatch not recognized
):
https://docs.mongodb.com/manual/reference/operator/aggregation/regexMatch/#exp ._ S_regexMatch
public List<T> MeistenHv<T>(string coll, string year)
{
/* Pipeline anlegen */
//Alle Dokumente mit dem angegebenen Jahr
var regex = new BsonDocument
{
{
"$addFields", new BsonDocument
{
{ "results", new BsonDocument
{
{"$regexMatch", new BsonDocument
{
{ "input", "$Bestelldatum" },
{ "regex", year}
}
}
}
}
}
}
};
//Gruppiert nach Hv, bei jedem Treffer um 1 inkrementieren
var group = new BsonDocument
{
{ "$group", new BsonDocument
{
{"_id", new BsonDocument
{
{"Hv", "$Hv"}
}
},
{"uniqueIds", new BsonDocument
{
{"$addToSet", "$_id"}
}
},
{"count", new BsonDocument
{
{"$sum", 1 }
}
}
}
}
};
//Absteigend sortiert nach der Häufigkeit der Hv
var sort = new BsonDocument
{
{
"$sort", new BsonDocument
{
{"count", -1 }
}
}
};
var pipeline = new[] { regex, group, sort };
var collection = db.GetCollection<T>(coll);
var data = collection.Aggregate<T>(pipeline).ToList();
return data;
}
Я также пробовал это с той же ошибкой:
var regex = new BsonDocument
{
{
"$regex", new BsonDocument
{
{ "Bestelldatum", year}
}
}
};
РЕДАКТИРОВАТЬ: (включая выборку c json)
{
"_id" : ObjectId("5e31bb10c1b1e773e46be7f8"),
"LsNr" : "L1016",
"Bv" : "Blahblah",
"Hv" : "27292",
"Bauleiter" : "Jonathan Fakename",
"Projektleiter" : "Patrick NotMyRealName",
"Besteller" : "zuwenig auf Baustelle",
"Abholer" : "Herr Brown",
"Lagerort" : "Lager",
"Bemerkung" : null,
"Status" : "gebucht",
"Sachbearbeiter" : "",
"Abholdatum" : null,
"Beleg" : "L1016",
"Umsatz" : "39.39",
"Gegenkonto" : "5999",
"Buchungsdatum" : "22.08.2018",
"Konto" : "5150",
"Kost1" : null,
"Kost2" : "27292",
"Text" : "Blahblah",
"Bestelldatum" : "22.08.2018",
"Heute" : "29.01.2020",
"artikelliste" : [
{
"_id" : ObjectId("5e31bb10c1b1e773e46be7f4"),
"Menge" : "1",
"Bezeichnung" : "My great article",
"Einheit" : "Eimer",
"Anforderungsgrund" : null,
"Einzelpreis" : "2.91",
"Gesamtpreis" : "29.1",
"Mgkzswert" : "31.43",
"Mgkzssatz" : "8",
"LetztesUpdate" : "29.01.2020 18:04:16",
"PersonUpdate" : "username",
"Kommentar" : null
},
{
"_id" : ObjectId("5e31bb10c1b1e773e46be7f5"),
"Menge" : "1",
"Bezeichnung" : "What an awesome article",
"Einheit" : "Stück",
"Anforderungsgrund" : null,
"Einzelpreis" : "3.98",
"Gesamtpreis" : "3.98",
"Mgkzswert" : "4.3",
"Mgkzssatz" : "8",
"LetztesUpdate" : "29.01.2020 18:04:16",
"PersonUpdate" : "username",
"Kommentar" : null
},
{
"_id" : ObjectId("5e31bb10c1b1e773e46be7f6"),
"Menge" : "1",
"Bezeichnung" : "Great articles you have here man",
"Einheit" : "Stück",
"Anforderungsgrund" : null,
"Einzelpreis" : "1.69",
"Gesamtpreis" : "1.69",
"Mgkzswert" : "1.83",
"Mgkzssatz" : "8",
"LetztesUpdate" : "29.01.2020 18:04:16",
"PersonUpdate" : "username",
"Kommentar" : null
},
{
"_id" : ObjectId("5e31bb10c1b1e773e46be7f7"),
"Menge" : "1",
"Bezeichnung" : "Is it available in huge, too?",
"Einheit" : "Stück",
"Anforderungsgrund" : null,
"Einzelpreis" : "1.69",
"Gesamtpreis" : "1.69",
"Mgkzswert" : "1.83",
"Mgkzssatz" : "8",
"LetztesUpdate" : "29.01.2020 18:04:16",
"PersonUpdate" : "username",
"Kommentar" : null
}
]
}
Вот мой класс модели:
using System;
using System.Windows;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Collections.ObjectModel;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace Lieferscheine.Models
{
public class
LieferscheinModel : INotifyPropertyChanged
{
//ATTRIBUTE
[BsonRepresentation(BsonType.ObjectId)]
public string _id;
public string Bauleiter { get; set; }
public string Projektleiter { get; set; }
public string Besteller { get; set; }
public string Abholer { get; set; }
public string Lagerort { get; set; }
public string Bemerkung { get; set; }
//rechts
public string Status { get; set; }
public string Sachbearbeiter { get; set; }
public string Abholdatum { get; set; }
public string Buchungsdatum { get; set; }
public string Konto { get; set; }
public string Kost1 { get; set; }
private ObservableCollection<ArtikelModel> _artikel = new ObservableCollection<ArtikelModel>();
private string _heute = DateTime.Now.ToString("dd.MM.yyyy");
private string _bestelldatum;
//************************************************************************************
//PROPERTIES
private string _lsNr;
public string LsNr
{
get
{
return _lsNr;
}
set
{
_lsNr = value;
OnPropertyChanged("LsNr");
Beleg = _lsNr;
}
}
private string _text;
public string Text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged("Text");
}
}
private string _hv;
public string Hv
{
get { return _hv; }
set
{
_hv = value;
OnPropertyChanged("Hv");
Kost2 = _hv;
}
}
private string _bv;
public string Bv
{
get { return _bv; }
set
{
_bv = value;
OnPropertyChanged("Bv");
Text = _bv;
}
}
private string _beleg;
public string Beleg
{
get { return _beleg; }
set
{
_beleg = value;
OnPropertyChanged("Beleg");
}
}
private string _gegenkonto = "5999";
public string Gegenkonto
{
get { return _gegenkonto; }
set
{
_gegenkonto = value;
OnPropertyChanged("Gegenkonto");
}
}
private decimal _umsatz = 0;
public decimal Umsatz
{
get { return _umsatz; }
set
{
_umsatz = value;
OnPropertyChanged("Umsatz");
}
}
private string _kost2;
public string Kost2
{
get { return _kost2; }
set
{
_kost2 = value;
OnPropertyChanged("Kost2");
}
}
public string Bestelldatum
{
get { return _bestelldatum; }
set
{
_bestelldatum = value;
OnPropertyChanged("Bestelldatum");
}
}
public string Heute
{
get { return _heute; }
set { _heute = value; } //private hinzufügen!
}
public ObservableCollection<ArtikelModel> artikelliste
{
get { return _artikel; }
set
{
_artikel = value;
OnPropertyChanged("artikelliste");
}
}
// *******************************************************************************
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public LieferscheinModel()
{
}
}
}