MongoDB查询以查找数组第一个元素的属性
为了解决我的问题,我简化了MongoDB中的以下数据MongoDB查询以查找数组第一个元素的属性,mongodb,Mongodb,为了解决我的问题,我简化了MongoDB中的以下数据 { _id: 0, actions: [ { type: "insert", data: "abc, quite possibly very very large" } ] } { _id: 1, actions: [ { type: "update", dat
{
_id: 0,
actions: [
{
type: "insert",
data: "abc, quite possibly very very large"
}
]
}
{
_id: 1,
actions: [
{
type: "update",
data: "def"
},{
type: "delete",
data: "ghi"
}
]
}
我希望找到每个文档的第一个操作类型,例如
{_id:0, first_action_type:"insert"}
{_id:1, first_action_type:"update"}
如果数据的结构不同,这很好,但我需要以某种方式呈现这些值
编辑:我尝试了db.collection.find{},{'actions.action_type':1},但显然这会返回actions数组的所有元素
NoSQL对我来说是相当陌生的。以前,我会将所有这些存储在关系数据库的两个表中,并执行类似于选择id、从操作中选择类型的操作,其中document\u id=d.id按seq LIMIT 1排序从文档d中选择操作类型。您还可以使用2.2版中引入的:
db.collection.aggregate([
{ $unwind: '$actions' },
{ $group: { _id: "$_id", first_action_type: { $first: "$actions.type" } } }
])
可以在投影中使用运算符。但对于您所做的,我不确定在更新阵列时阵列的顺序是否保持不变。只是为了记住
db.collection.find({},{'actions':{$slice:1},'actions.type':1})
使用$arrayElemAt运算符实际上是最优雅的方式,尽管语法可能不直观:
db.collection.aggregate([
{ $project: {first_action_type: {$arrayElemAt: ["$actions.type", 0]}
])
简单地说…集合的操作[0]。查找方法这些文档很大…我希望使用投影或其他方法来帮助我仅获取所需内容。您可以在这样的问题中添加索引,您应该包括一个尝试过的解决方案,在这种情况下,您尝试过的查询无效。它将返回整个数组,在小组开始前需要放松一下。如下所示:db.collection.aggregate[{$unwind:'$actions'},{$group:{{{u id:$\u id,first\u action}类型:{$first:$actions.type}}}]@PaulDraper抱歉输入错误。已修复,您现在可以尝试: