当前位置: 首页 > 知识库问答 >
问题:

有可能在Mongo得到一片一片的吗?

梁宏才
2023-03-14

我正在查询一个mongo集合,它有一个数组字段。我想从数组中找到一个具有一个深值投影的记录。从概念上讲,这是一个切片的切片。在蒙戈有办法做到这一点吗?

例如-我有一个记录:

{
 name: "foo",
 text: [["part 1:1", "part 1:2"],["part 2:1","part 2:2"]] 
}

并希望选择带投影的记录"part 2:2"。

db.collection.find({"name":"foo"},{text: {$slice: [1,1]}} 

给我的数组与"部分2:1"和"部分2:2"。我怎么才能得到“第二部分: 2”?

共有2个答案

阎鹏
2023-03-14

如果您想要特定的第2:2部分,下面的查询将有所帮助。

db。使用者查找({“name”:“foo”},{u id:0,name:0})[0]。案文[1][1];

部分2:2

邓俊英
2023-03-14

您需要使用聚合管道来实现$slice链,因为项目语句是find查询的一部分。

下面的查询无效,因为第一个$片将返回数组而不是索引,并且外部范围的$片的执行失败。

db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})

此外,无法处理同一项目语句中的投影字段,如果可能的话,我们可以通过对文本应用$slice来进一步修改文本。

要走的路是:

  • 匹配名称为foo的记录。
  • 展开文本数组以到达第一级。
  • 再次放松以达到我们想要的水平。
  • 将记录按名称分组。
  • Project组中的最后一条记录,它也是最后一个嵌套数组的最后一个元素。

守则:

db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])

或者,如果希望投影以特定顺序出现的元素,则可以使用$skip$limit操作来实现此目的。

var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])

在嵌套数组中按顺序投影第二个元素。

 类似资料:
  • 问题内容: 现在我正在做: 有没有更有效的方法直接从Find(或其他搜索功能)中获取带有用户名的slice,而没有struct和range循环? 问题答案: MongoDB的结果始终是文档列表。因此,如果要获取值列表,则必须像以前一样手动将其转换。 使用自定义类型(源自) 另外请注意,如果您要创建自己的类型(从派生),则可以覆盖其取消编组逻辑,并仅从文档中“提取” 。 它看起来像这样: 然后将用户

  • 我试着从一个片段到主要片段。编译器不喜欢我的代码,但我不确定是什么问题。转换片段的最佳实践是什么? //这是我要导航到的主片段的xml 2019-07-12 17:49:45.091 959 4-9594/com.example.cribb E/AndroidRuntime:致命异常:主进程:com.example.cribb,PID:9594 Android.content.res.resour

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 先生/女士,我想使用android JAVA将一个片段回调到另一个片段。我试图找到问题,但没有找到解决方案。若我使用接口,它会向活动发送回调响应,这是我不想要的。非常感谢。

  • 当我将一个片段(它是带有背景的全屏)显示在另一个片段(我们称之为main)上时,我的main片段仍然会对单击做出反应(即使我们没有看到按钮,我们也可以单击它)。 问题:如何防止点击第一(主)片段?

  • 我在Google上找不到任何关于使用记录的资料。 我在想这样的事情: 是好事吗?我们是不是应该为了将来的枯萎病而避免它呢?