Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查询以查找数组第一个元素的属性_Mongodb - Fatal编程技术网

MongoDB查询以查找数组第一个元素的属性

MongoDB查询以查找数组第一个元素的属性,mongodb,Mongodb,为了解决我的问题,我简化了MongoDB中的以下数据 { _id: 0, actions: [ { type: "insert", data: "abc, quite possibly very very large" } ] } { _id: 1, actions: [ { type: "update", dat

为了解决我的问题,我简化了MongoDB中的以下数据

{
    _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抱歉输入错误。已修复,您现在可以尝试: