我有一个聊天应用,即Ionic 2
和Meteor
MongoDB
。它运作得很好。
但是,所有内容都存储在服务器上的MongoDB
中,因此每次用户想要查看其消息时,都需要将它们连接到云中运行的Meteor/Mongo
服务器。此外,如果一个用户删除了他们的chat
,则会删除chat
上的MongoDB
,相应的其他用户也会删除chat
。
我想要与 WhatsApp 类似的功能,其中messages
在设备上本地保存(我使用的是SQLite
),只有新的messages
是保存在云端,直到两个用户都下载它们。
目前我的应用程序迭代Mongo.Cursor<Chat>
个对象。它还会观察此对象(this.chats.observe({changed: (newChat, oldChat) => this.disposeChat(oldChat), removed: (chat) => this.disposeChat(chat)});
)。
我从本地存储的chat
获取SQLlite
个数据(Array<Chat>
)。
问题
是否可以将SQLite
数据(Array<Chat>
)添加到Mongo.Cursor<Chat>
?当我这样做时,我想在服务器上添加minimongo
而不是MongoDB
。
由于
更新
Asp建议如下,我做了以下几点:
let promise: Promise<Mongo.Cursor<Chat>> = new Promise<Mongo.Cursor<Chat>>(resolve => {
this.subscribe('chats', this.senderId, registeredIds, () => {
let chats: Mongo.Cursor<Chat> = Chats.find(
{ memberIds: { $in: registeredIds } },
{
sort: { lastMessageCreatedAt: -1 },
transform: this.transformChat.bind(this),
fields: { memberIds: 1, lastMessageCreatedAt: 1 }
}
);
this.localChatCollection = new Mongo.Collection<Chat>(null);
console.log(this.localChatCollection);
chats.forEach(function (chat: Chat) {
console.log('findChats(): add chat to collection: ' + chat);
this.localChatCollection.insert(chat);
});
如果有效则会更新。
更新
当我执行以下操作时,它inserts
chat
对象:
let promise: Promise<Mongo.Collection<Chat>> = this.findChats();
promise.then((data: Mongo.Collection<Chat>) => {
let localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
data.find().forEach(function (chat: Chat) {
console.log('==> ' + chat);
localChatCollection.insert(chat);
});
但是,如果我全局定义localChatCollection
,则insert
chat
对象不会insert
。没有错误,但该过程在private localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
....
this.localChatCollection.insert(chat);
行停止。
collection
我有什么想法可以将其插入到全局定义的'footerCallback': function ( row, data, start, end, display ) {
var api = this.api(), data;
//Remove the formatting to get integer data for summation
var numVal = function ( i ) {
return typeof i === 'string' ?
parseFloat(i.split("€")[1].split("<")[0].replace(/,/, '.')) :
typeof i === 'number' ?
i : 0;
};
var perTemp = function ( i ) {
// I need some help here...
}
// Total over all pages
totalvar = api
.column( 3 )
.data()
.reduce( function (a, b) {
return numVal(a) + numVal(b);
}, 0 );
totaltemp= api
.column( 4 )
.data()
.reduce( function (a, b) {
return perTemp(a) + perTemp(b);
}, 0 );
// Update footer
$( api.column( 3 ).footer() ).html('€ ' + totalvar);
$( api.column( 4 ).footer() ).html(totaltemp[0] + "h" + totaltemp[1] + "m");
?
答案 0 :(得分:1)
是否可以将SQLite数据(数组)添加到Mongo.Cursor?当我这样做时,我想在服务器上添加minimongo而不是MongoDB。
Meteor本身对SQLite一无所知,但听起来你有这部分工作。
要添加到minimongo而不是mongodb服务器,您需要查找客户端集合。只需将null
作为第一个参数传递给调用以创建您的集合,即
var localChatCollection = new Mongo.Collection(null)
然后,您可以使用与同步集合相同的方式插入localChatCollection
。