我有以下代码:
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 }
});
它不起作用,错误消息没有帮助(“未定义”)。
有没有办法在Meteor的MongoDB中存储JavaScript Map对象?
答案 0 :(得分:0)
我认为目前还没有直接的方法将Map对象插入MongoDB。我建议的一个可能的解决方法是:
架构可能如下所示:
std::list
将Map对象转换为此格式的Helper函数反之亦然,必须写入该效果。
答案 1 :(得分:0)
在您的示例中,您具有这样的模型:
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 }
});
使用此方法,您可以轻松地将地图转换为对象并进行插入。