我正在查询一个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:2部分,下面的查询将有所帮助。
db。使用者查找({“name”:“foo”},{u id:0,name:0})[0]。案文[1][1];
部分2:2
您需要使用聚合管道来实现$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上找不到任何关于使用记录的资料。 我在想这样的事情: 是好事吗?我们是不是应该为了将来的枯萎病而避免它呢?