我的查询是:
public class OrderValueProviderFactory<T> : ValueProviderFactory where T : class
{
public override IValueProvider GetValueProvider(HttpActionContext actionContext)
{
var querystring = actionContext.Request.GetQueryNameValuePairs().ToDictionary(x => x.Key.ToLower(), x => x.Value);
return new OrderValueProvider<T>(querystring);
}
}
public class OrderValueProvider<T> : IValueProvider
{
readonly Dictionary<string, string> querystring;
public OrderValueProvider(Dictionary<string, string> _querystring)
{
querystring = _querystring;
}
public bool ContainsPrefix(string prefix)
{
return true;
}
public ValueProviderResult GetValue(string key)
{
T obj = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] properties = typeof(T).GetProperties();
foreach (var property in properties)
{
if (property.PropertyType == typeof(string))
{
property.SetValue(obj, querystring.GetStringValue(property.Name.ToLower()));
}
else if (property.PropertyType == typeof(DateTime?))
{
property.SetValue(obj, querystring.GetDateTimeValue(property.Name.ToLower()));
}
else if (property.PropertyType == typeof(int))
{
property.SetValue(obj, querystring.GetIntValue(property.Name.ToLower()));
}
}
return new ValueProviderResult(obj, "", CultureInfo.InvariantCulture);
}
}
但我也执行相同的查询并获取计数结果(来自同一查询) 所以1个结果是最后一个限制为1的结果,第二个是没有限制的计数
我如何在MongoDB中做到这一点?
我想到的一个选项是执行相同的查询,但没有限制,例如,获取2000个结果并计入node.js代码。
我的节点代码:
event.find({
id:{$get:id},
num:"5"
}).limit(1)
,但count始终返回1(因为count应该忽略id选项) 有可能吗?
示例:
请求是name = yy和id = 3
result = await this.collection.find({
'val':obj.val,
'id' : {$lt: id}
}).sort({id:-1}).limit(1).project({_id:0})
let count = await result.count()
另一个例子
结果将是:第2行(大于2的3)。计数= 2
1- { id :3 , name:yy },
2 - {id : 2 , name:yy}
结果将是:[] count = 1。 (没有id
答案 0 :(得分:1)
您可以使用$facet
result = await this.collection.aggregate([
{ "$facet": {
"count": [
{ "$match": { "id": { "$lte": id }}},
{ "$count": "count" }
],
"data": [
{ "$match": { "val": obj.val, "id" : id }},
{ "$sort": { "id": -1 }},
{ "$limit": 1 },
{ "$project": { "_id": 0 }}
]
}}
])
result = result[0].data
const count = result[0].count