从下面的示例可以看出,当我进行聚合时,它会输出所需的结果,但实际结果没有被替换。有人可以告诉我如何保留聚合o/p吗?
> db.demo95.find();
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : "5ab9cbe531c2ab715d42129a" }
> db.demo95.aggregate([ { "$addFields": { "Id" : { "$toObjectId": "$Id" } }} ])
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : ObjectId("5ab9cbe531c2ab715d42129a") }
> db.demo95.find();
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : "5ab9cbe531c2ab715d42129a" }
Run Code Online (Sandbox Code Playgroud) 集合中的项目包含一个字符串数组。我想查找数组中最匹配元素的项目并对其进行排序。
考虑一个集合:
[
{
"item_name":"Item_1",
"tags":["A","B","C","D","E"]
},
{
"item_name":"Item_2",
"tags":["A","B","D","E","G"]
},
{
"item_name":"Item_3",
"tags":["B","C","E","H"]
}
]
Run Code Online (Sandbox Code Playgroud)
我想基于像 ["B","D","G","F"] 这样的数组对集合进行排序,它将返回
[
{
"item_name":"Item_2",
"tags":["A","B","D","E","G"]
},
{
"item_name":"Item_1",
"tags":["A","B","C","D","E"]
},
{
"item_name":"Item_3",
"tags":["B","C","E","H"]
}
]
Run Code Online (Sandbox Code Playgroud)
预期的顺序将是 Item_2、Item_1,然后是 Item_3,因为,
如果不在 mongodb 中,JavaScript 方法也将受到赞赏
javascript mongoose mongodb mongodb-query aggregation-framework
我有一个 mongodb 事件集合,我想从中获取当前可用事件,所以我正在使用这样的匹配查询
Event.aggregate([ { $match: { isActive: true, ...matchQuery, startDate:{$lt:today}, endDate:{$gt:today} } },])
Run Code Online (Sandbox Code Playgroud)
问题是,并非我的数据库中的所有事件都有 startDate 和 enDate 字段,我也想获取这些事件,所以我想检查 startDate 和 endDate 是否存在,那么如果它们不存在,它们应该比今天的 lt 和 gt并且该文档与查询的其余部分匹配,我想获取它。我尝试了这种方法,但不起作用
{ $match: { isEnabled: true, ...matchQuery, startDate ? {startDate:{$lt:today}}, endDate ? endDate:{$gt:today} } },
Run Code Online (Sandbox Code Playgroud)
谢谢
当尝试将类型化文档投影到不同的类中时,我得到以下信息:在表达式树 new NewItem({document}, 1021) 中的类型“ NewItem ”上找不到构造函数参数“origItem”的成员匹配。
类的简化示例如下:
public class OriginalItem
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public IList<double> Data { get; set; }
public OriginalItem() { }
}
public class NewItem
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public double Value { get; set; }
public NewItem() { }
public NewItem( OriginalItem origItem, int targetIdx )
{
Id = …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据 Asya Kamsky 的帖子使用 MongoDB 和 Spring Data 实现自定义排序:
List<AggregationOperation> operations = new ArrayList<>();
operations.add(Aggregation.addFields().addField("scorrrz")
.withValueOfExpression("{ \"$indexOfArray\" : [ [\"John\", \"Bill\"], \"$name\" ] }").build());
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此操作时,我得到:
ERROR a.insurance.misc.ErrorAttributes - /api/v1/insurance/opportunity/all
org.springframework.expression.spel.SpelParseException: Expression [{ "$indexOfArray" : [ ["John", "Bill"], "$name" ] }] @29: EL1043E: Unexpected token. Expected 'rsquare(])' but was 'comma(,)'
Run Code Online (Sandbox Code Playgroud)
这不是正确的语法吗?如何使用 Spring Data 来完成此操作?
mongodb spring-data aggregation-framework spring-data-mongodb
我需要包含多个标识符的文档
它不起作用(冻结):
db.collection.aggregate([{
$match: {
$expr: {
$in: ['$_id', [4, 6]]
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
但它有效:
db.collection.find({
_id: {
$in: [4, 6]
}
});
Run Code Online (Sandbox Code Playgroud) 我有两个收藏users和posts。
用户有这样的文档:
{
_id: ObjectId('611142303c409b5dc826e563'),
name: 'foo'
}
Run Code Online (Sandbox Code Playgroud)
posts有这样的文档:
{
_id: ObjectId('611142303c409b5dc826e111'),
comments:[
{
owner: ObjectId('611142303c409b5dc826e563'),
description: "my description"
},
{
owner: ObjectId('611142303c409b5dc826e333'),
description: "my description2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我收到服务器端的请求时,我需要返回所有者的整个文档,而不仅仅是其 id。
例如对于一个 get 请求我必须返回:
{
_id: ObjectId('611142303c409b5dc826e111'),
comments:[
{
owner:{
_id: ObjectId('611142303c409b5dc826e563'),
name: 'foo'
},
description: "my description"
},
{
owner: {
_id: ObjectId('611142303c409b5dc826e555'),
name: 'foo2'
},
description: "my description2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
为此,我执行了以下管道:
[
$lookup:{
from: 'owners',
localField: 'comments.owner',
foreignField: '_id',
as: 'owners_comments' …Run Code Online (Sandbox Code Playgroud) 我在聚合管道的第一阶段使用以下方法得到了这组结果$match:
[
{ a: 1, b: 2 },
{ a: 3, b: 4 }
]
Run Code Online (Sandbox Code Playgroud)
现在我想对所有 A 和 B 求和,并且仍然保留它们,因此我将得到如下结果:
{
total_sum: 10,
items: [...] // first and second objects ofcourse
}
Run Code Online (Sandbox Code Playgroud)
我尝试过$group,$push但是,push 只从对象中推送特定字段,我需要命名 A 和 B,而不是解析所有它们。
我该怎么做?
我有Orders 和Shops。
db={
"orders": [
{
"_id": 1,
"shop": 1,
"price": 11
},
{
"_id": 2,
"shop": 2,
"price": 101
},
],
"shops": [
{
"_id": 1,
},
{
"_id": 2,
},
{
"_id": 3,
},
],
}
Run Code Online (Sandbox Code Playgroud)
我想找出哪些商店的订单数为0。
我是这样做的
db.shops.aggregate([
{
$lookup: {
from: "orders",
let: {
shop: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$shop",
"$$shop"
]
},
},
},
],
as: "orders",
},
},
{
$project: {
user: "$user", …Run Code Online (Sandbox Code Playgroud) 我正在构建一个可以比作约会应用程序的应用程序.
我有一些像这样结构的文件:
$ db.profiles.find().pretty()
[
{
"_id": 1,
"firstName": "John",
"lastName": "Smith",
"fieldValues": [
"favouriteColour|red",
"food|pizza",
"food|chinese"
]
},
{
"_id": 2,
"firstName": "Sarah",
"lastName": "Jane",
"fieldValues": [
"favouriteColour|blue",
"food|pizza",
"food|mexican",
"pets|yes"
]
},
{
"_id": 3,
"firstName": "Rachel",
"lastName": "Jones",
"fieldValues": [
"food|pizza"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我正在努力识别在一个或多个上相互匹配的配置文件fieldValues.
所以,在上面的例子中,我理想的结果看起来像:
<some query>
result:
[
{
"_id": "507f1f77bcf86cd799439011",
"dateCreated": "2013-12-01",
"profiles": [
{
"_id": 1,
"firstName": "John",
"lastName": "Smith",
"fieldValues": [
"favouriteColour|red",
"food|pizza",
"food|chinese"
]
},
{
"_id": 2,
"firstName": …Run Code Online (Sandbox Code Playgroud) mongodb ×10
mongoose ×2
.net ×1
aggregate ×1
aggregation ×1
c# ×1
javascript ×1
mapreduce ×1
match ×1
node.js ×1
nosql ×1
spring-data ×1