我可以将JavaScript Map对象存储在Meteor的MongoDB中吗?
Can I Store the JavaScript Map Object in Meteor's MongoDB?
我有以下代码:
myMapField = new Map();
for (var i = stuff.length; i--; ) {
myMapField.set(stuff.id, { name: stuff.name, type: Types.MY_TYPE });
}
Meteor.users.update(Meteor.userId(), {
$set: { 'profile.myMapField': myMapField }
});
它不起作用,错误消息没有帮助("未定义")。
有没有办法将JavaScript Map对象存储在Meteor的MongoDB中?
我认为目前
还没有直接的方法可以将Map对象插入MongoDB。我可以建议的一种可能的解决方法是:
- 循环访问 Map 对象,然后
- 将键值对单独存储在数据库中
架构可能如下所示:
{
_id: someId,
map: [{
key: key1,
value: value1
},{
key: key2,
value: value2
},{
key: key3,
value: value3
},{
key: key4,
value: value4
},{
...
}]
}
用于将 Map 对象转换为此格式(反之亦然)的帮助程序函数必须为此效果进行写入。
从您的示例中,您有一个这样的模型:
const profile = {
myMapField: {
id: { name: "name1", type: "type1"}
}
}
然后你有一个地图而不是一个对象,因为你想享受地图的所有好处。没有用于Map
的模式类型,但在插入到mongodb文档之前,解决方法是使用简单的函数将地图转换为普通对象。
const myMapField = new Map();
for (var i = stuff.length; i--; ) {
myMapField.set(stuff.id, { name: stuff.name, type: Types.MY_TYPE });
}
const mapToObj = map => {
let object = {};
for (const [key, value] of map) {
object[key] = value;
}
return object;
}
const objectFromMap = mapToObj(myMapField);
console.log(objectFromMap)
//{ id1: { name: 'id1', type: 'type1' }, id2: { name: 'id2', type: 'type2' } }
Meteor.users.update(Meteor.userId(), {
$set: { 'profile.myMapField': objectFromMap }
});
使用此方法,您可以轻松地将地图转换为对象并进行插入。
相关文章:
- 无法在Meteor/MongoDB中返回当前用户对象
- 更新属性工作不正常Meteor/MongoDB
- 如何从Meteor内部获取当前连接的MongoDB数据库的URL
- 如何在MongoDB和Meteor中自动销毁1-M连接
- Meteor:从Twilio获取SMS文本列表,并将它们插入mongoDB
- Selectize.js:如何将数据库中已经选择的标签预加载到输入字段(Meteor&MongoDB/JSON)
- 我的 Meteor 项目如何通过服务器端 MongoDB/集合查找查询可靠地显示信息
- Meteor+MongoDB:如何获取嵌套数据
- Meteor MongoDB 集合无法访问 Meteor 发布
- Meteor MongoDB表达式“;如果“;在查询中
- 将对象插入Meteor MongoDB中的多维数组中
- 为什么下面的Meteor/mongodb findOne返回未定义
- 在Meteor(MongoDB)中,按另一个集合中的值搜索一个集合
- Meteor MongoDB从对象中获取数组
- Meteor, MongoDB手册参考- 2匹配集合字段
- Meteor & MongoDB Geospatial - bounds - $within
- Meteor mongodb数据透视和更优雅的代码
- Meteor/MongoDB:通过同一属性的多个值查找文档
- SQL外键在Meteor - MongoDB中的行为
- Meteor/MongoDB查看可用的发布字段