问题标签 [mongoskin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如何在 mongodb 投影查询中放置一个包含项目或项目之间的数组?
我有一个 mongodb 数据库,它以以下格式存储项目:
我想通过我的查询在特定日期获取一些特定的项目数据。我可以用硬编码完成一天或更长时间,但我想给它一个数组,该数组将自动填充特定日期和项目名称,但在堆栈和 mongo 文档中搜索超过一天后我找不到任何事物。请帮我解决一下这个。获取一个特定项目和日期的查询如下:
谢谢
javascript - 日期范围上的 MongoDb 唯一约束
我将 MongoDb 与 Mongoskin 一起使用。在一个集合中,我正在保存事件。在其他字段中,这些事件有一个开始和结束,保存Dates
在 Mongodb 中。
在此集合中插入新文档时,我需要一个约束来禁止插入开始日期与已创建事件重叠的文档。简而言之,我不希望任何事件共享相同的时间跨度。
问题:有没有办法通过带有某种唯一索引的 MongoDb 来处理这个约束?我认为不是,但如果我错了,请纠正我!
如果不:
问题在插入新事件之前,我是否必须通过代码检查可能的重叠?我是否需要设置某种写锁定,以便其他用户在我检查重叠和插入我自己的事件之间不能挤入事件?这是如何在 MongoDb 中完成的?
编辑
这是迄今为止我想出的最好的方法,它实际上似乎工作得很好。
它使用findAndModify
作为“findOrCreate”运算符的一种类型。$setOnInsert
仅在findAndModify
未找到文档时添加 POST 输入属性,并upsert: true
表示如果未找到则应创建文档。这两个选项组合起来似乎创建了一个 findOrCreate 运算符。
编辑
更新 (PUT) 事件时会出现问题。我不能重用上面的代码,因为它依赖于upsert
and $setOnInsert
。
编辑
@wdberkeley:
我仍在努力解决这个主要问题:确保 range 的唯一性。我想得越多,似乎“时间片数组”可能是最没有问题的解决方案。例如,假设选择 5 分钟作为最短时间段,平均预订时间为 45 分钟。这将需要我保存 9 个数字(可能是date
s)timespan = [0,5,10,15,20,25,30,35,40]
:,而不是两个:start=0, end=45
。这是平均预订数据的四倍多。我并不是要严厉,但你不认为这是一个问题吗?还是当保存的数据大10 倍或100 倍时首先成为问题?我确实意识到这也与实际预订的总数量有关......
mongodb - 带有 mongoskin 的 ObjectID
为什么这个查询在 Mongoskin 中不起作用?(其中 itemID 是 Mongo ObjectID
)
我知道确实存在一个匹配的元素,_id
因为如果我通过 MongoDB shell 运行相同的查询,它就可以工作。为什么它不适用于 Mongoskin?
javascript - 将多个对象传递给车把模板 - MongoDB、node.js、mongoskin
我有一个应用程序,我需要从 Mongo 数据库中的两个不同集合中读取数据,并将两个返回的对象都传递到把手模板中。
使用下面的代码,我无法弄清楚如何让它工作,因为没有填充 universityData 和 courseData 变量,不确定这是否是正确的方法。
回调中的大学和课程对象正常工作,因为当我登录时,我得到了我需要的值。
我的问题是如何将每个查询中的对象传递到一个模板中?
任何帮助将不胜感激,因为我对 Javascript、node 和 Mongo 还很陌生。
javascript - 关闭 mongodb 连接并通过多个并行异步查询获得正确的结果
我是 Mongo 和 Node 的新手。我目前正在使用 Mongoskin 和 Bluebird 来处理数据库连接和查询(如此处建议:https ://stackoverflow.com/a/23687958/2701348 )。
我有三个集合:用户、活页夹和卡片。
Binders 集合包含有关每个用户的卡片的信息。Binder 中的每个文档都具有以下属性:
我更喜欢有一个单独的 Cards 集合,这样当 Card 更改时,它会为所有用户绑定器更改。
现在我愿意为给定的用户检索一个数组,例如:
我有以下问题:
- 调用所有异步数据库回调后,应关闭数据库连接
- 卡片数组应该在最后一个db.collection ('cards').find返回结果之后返回
我知道我的以下代码是错误的,但可以作为讨论的起点:
我正在努力弄清楚如何正确处理承诺的异步调用,以便发回整个数组并关闭数据库连接。
我想我应该尝试在 for 循环之前构建一个 Promise,并使用它来链接 Cards Promise 上的查询,最后链接 db.close() 和 res.json(cards) 语句。
[编辑] 也许最简单的解决方案是在单个db.collection('cards').find({Code: {$in: [bindersCodeArray] }}).toArrayAsync();中简单地使用 $in 过滤器。并避免 for 循环:
我仍然很好奇是否有一种优雅的方法可以使用 Promise 来解决这个谜题。
node.js - Mongoskin -- 聚合查询抛出错误,在 mongo cli 中工作正常
所以我有一个相当简单的 mongo 查询,我试图从一个集合中返回一个独特年份的列表。我有一个使用 mongo CLI 构建的聚合查询,它返回我正在寻找的结果:
当我将它插入使用 mongoskin 作为数据库驱动程序的 express 应用程序时,它会引发错误
错误:
我可以找到与 mongoskin 一起使用聚合查询时遇到问题的类似报告。不少人建议只使用本机 mongo 驱动程序,但我的堆栈跟踪与我所见过的任何不同。我的查询中有什么突出的问题吗?有任何想法吗?
谢谢
node.js - NodeJS + MongoSkin + 时间戳
有一些关于通过 MongoSkin 将时间戳插入 Mongodb 的帖子,但在返回端没有任何内容(除了从 ObjectID 中提取日期)。
运行 findOne(包括 MongoDate 字段)后,控制台日志将数据字段读取为 ISO 日期,但是否有一个内部函数可以提取 ->sec / 时间戳。
node.js - 大结果集导致的 MongoDb 错误
在尝试获得完整的结果集(约 40 个结果)时,我实际上面临一个问题。每个对象都包含大约 260 个子引用和其他对象。
实际上,当我尝试显示 30 个对象时,它可以工作。但是当我尝试使用 40 时,它没有。每个对象都是正确的,没有数据是无效的。
似乎我已经超过了 mongoDb 或默认 Mongoskin(我用来访问 mongodb 的库)授权的最大大小(4 或 16 mb),并且 mongodb 关闭了与我的应用程序的池连接。
那么如何增加最大文档大小或最大结果集大小以显示我需要的所有内容?
编辑:我的收藏大小是 8Mb(来自 MongoVue 信息)
编辑 2: 我用来获取数据的代码:
我的数据库的屏幕截图:
编辑 3:我改变了利用数据的方式
它也不起作用,请求被执行,然后,我失去了我的 mongodb 连接。如果我在我的应用程序中评论这段代码,一切都很好。
编辑 4:完整的堆栈跟踪,这更像是一个库问题而不是数据库问题
node.js - findOne 与 mongoskin 和节点
我正在尝试(并且惨遭失败)让 findOne 函数在 mongodb 上工作。我遵循了本教程(http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/),它工作正常,但是当我试图获得一个简单的 findOne 时,我有有这样的问题,有人可以帮我吗?我已经搜索了所有我能找到的教程,我知道你不能只使用 findone({_id: "idnumber"}),但我不知道我的有什么问题:
我收到错误“无法调用未定义的方法'createFromHexString'”,我应该在哪里需要我的 mongoskin.objectid?
我的 findall 完美运行:
任何帮助将不胜感激。