我正在学习MongoDB与NodeJS一起使用。以下是我的代码:
let configMap = {
'1': 10,
'2': 12,
'3': 13
}
let myData = await mongo_groups_collection.find({
_id: {
$in: [1,2,3]
},
active: true
}).project({
'_id': 1,
'name': 1,
'members': 1,
'messages': {
$slice: [-(configMap[_id]), (DEFAULT_PAGE_SIZE_FILL * PAGE_SIZE) + (PAGE_SIZE - ((configMap[_id]) % PAGE_SIZE))] //Need to use _id to get configMap value
}
}).toArray();
我在Mongo slice函数中使用“configMap”nodeJS变量从数组中检索一定数量的元素。要检索,我需要使用未获取的“\u id”字段值进行查找,并遇到\u id“undefined”错误。
这是因为(configMap[\u id])
是在节点中编译的。js代码,但不是作为查询在数据库上。因此,在代码中,当这个查询被编译时,它无法找到\u id
,因为您没有像对configMap
变量那样声明它。
您希望id值是文档中的实际id。所以,如果您使用(configMap[$\u id])
,它就不能以这种方式工作,因为您不能将javascript对象与文档字段合并。
您仍然可以使用如下所示的聚合
查询来执行此操作-我们实际上将所需的v
值作为字段添加到文档中以供进一步使用:
/** Make `configMap` an array of objects */
var configMap = [
{ k: 1, v: 10 },
{ k: 2, v: 12 },
{ k: 3, v: 13 },
];
let myData = await mongo_groups_collection.aggregate([
{
$match: { _id: { $in: [1, 2, 3] }, active: true }
},
/** For each matched doc we'll iterate on input `configMap` array &
* find respective `v` value from matched object where `k == _id` */
{
$addFields: {
valueToBeSliced: {
$let: {
vars: { matchedK: { $arrayElemAt: [ { $filter: { input: configMap, cond: { $eq: ["$$this.k", "$_id"] } } }, 0 ] } },
in: "$$matchedK.v",
}
}
}
},
{
$project: {
messages: { $slice: ["$messages", { $subtract: [0, "$valueToBeSliced"] }, someInputValue ] },
name: 1, members: 1
}
}
]).toArray();
参考:$出租
注:
'_id': 1
,因为它默认包含在内。. search()
,因此您可能使用了无法在聚合中使用的$seply-projing-运算符,而我们需要使用$seply-聚合运算符,两者做同样的事情但有语法变化,您需要参考文档。一些InputValue
中,您需要传入(DEFAULT_PAGE_SIZE_FILL*PAGE_SIZE)(PAGE_SIZE-((配置地图[_id])%PAGE_SIZE))
-因此尝试使用聚合运算符$划分
来获取值。我们正在执行{$减去:[0,"$value eToBeSliced"]}
将正value eToBeSliced
转换为负,因为我们不能像通常在javaScript中那样做-value eToBeSliced
。问题内容: 我有一个具有唯一的数字运行ID的文档集合,我想找到运行ID最高的文档。 我可以做两个查询。 首先,我可以找到最高的运行ID: 其次,我可以找到具有该运行ID的文档: 有没有办法我可以通过一个查询做到这一点? 问题答案: 您可以通过组合“ sort”和“ size”来实现: 这将返回最高的记录
我必须将此添加到我执行的每个搜索查询中。我有一个大约20,000个文档的索引,我真的不想重建它,因为我在上一个版本中让我的用户重建了他们的索引。注意:这是在android设备上,所以需要很长的时间和大量的电池来重新索引他们的所有文档。 谢谢你的帮助。
我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如,下面是一个示例集合: 我希望找到docs块中没有包含至少一个foo=1的记录的文档的每个记录。在上面的示例中,应该只返回第二个文档。 我还查看了$nin运算符,但示例只显示数组包含基元值列表时的情况,而不是附加文档。当我尝试使用类似于下面的东西来实现这一点时,它查找的是确切的文档,而不仅仅是我想要的foo字段。 有没有用基本运算符来
每个食谱文档包含三个内容。一个名为的字段,其中存储菜谱的名称;一个名为的字段,其中存储创建者uid的,以及一个名为的子集合,其中包含带有一些随机字段的文档。 问题是,使用这些规则只能创建菜谱文档。子集合及其文档不会创建,因为db表示 FirebaseError:[code=permission-denied]:缺少权限或权限不足。FirebaseError:缺少权限或权限不足。
如何在下面的示例中从Cloud FiRecovery查询某个日期()和某些用户()的所有时间戳?现在,我可以下载整个文档并在设备上对其进行过滤。但它无效。
在这里给ElasticSearch的初学者排名。 我有一个客户列表,他们的订单作为一个嵌套字段。假设文档结构如下: 我想查询的是:在两个日期之间订购了一定数量的用户列表。我希望能够将它与例如生日的范围查询结合起来。 我已经到了这样的地步,我可以使用聚合来获得每个订户在两个日期之间的排序总和: 但是,我想限制查询部分返回的结果,以便更好地与所有其他过滤器混合。 我的第一个想法是使用一个脚本过滤器,并