问题标签 [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 来解决这个谜题。