Lokijs 发现给出了不正确的响应
Lokijs find is giving incorrect response
Lokijs 在 Node JS 环境中给出错误的查找响应
这个例子来自网上:
// This database has already been created for you.
// var db = new loki('sandbox');
// Add a collection to the database
var items = db.addCollection('items');
// Add some documents to the collection
items.insert({ name : 'mjolnir', owner: 'thor', maker: 'dwarves' });
items.insert({ name : 'gungnir', owner: 'odin', maker: 'elves' });
items.insert({ name : 'tyrfing', owner: 'Svafrlami', maker: 'dwarves' });
items.insert({ name : 'draupnir', owner: 'odin', maker: 'elves' });
// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
tyrfing.owner = 'upated';
// These statements send to Text Output
logText('tyrfing value :');
logObject(tyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));
// This statement sends to Inspector
inspectObject(db);
插入几个虚拟数据后;我从同一个集合中获取并将其分配给一个名为 "tyrfing";
的 templ 变量
现在,问题来了;我用名为 "upated" 的新值对所有者 属性 进行了更新。尽管我没有让 loki save/update 更新;
当我调用名称为 "tyrfing" 的查找时,它给出的响应为
odins items
[
{
"name": "tyrfing",
"owner": "upated",
"maker": "dwarves",
"meta": {
"revision": 0,
"created": 1554823595464,
"version": 0
},
"$loki": 3
}
]
这是不正确的,我希望响应中的所有者名称为 "Svafrlami";因为我没有提交任何数据库;
如有不妥请指正;
您可以通过复制粘贴此代码在线测试此代码:http://www.obeliskos.com/LokiSandbox/
我花了几分钟想通了; items.find
正在返回 actual/real 对象引用;因此,如果我进行任何更改,它也会反映在原件中;
所以我克隆了从查找中得到的原始对象,然后对克隆的对象进行了更改并且它起作用了:)
这是代码:
var clone = require('clone');
// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
var temptyrfing = clone(tyrfing);
temptyrfing.owner = 'upated';
// These statements send to Text Output
logText('tyrfing value :');
logObject(temptyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));
我使用 "clone" npm 模块克隆对象
请post我,如果还有其他可能的话;
@Creator 实际上,LokiJS 的做法是在集合构造函数中传递 clone
选项:docs
您还可以指定要使用的克隆方法。
Lokijs 在 Node JS 环境中给出错误的查找响应
这个例子来自网上:
// This database has already been created for you.
// var db = new loki('sandbox');
// Add a collection to the database
var items = db.addCollection('items');
// Add some documents to the collection
items.insert({ name : 'mjolnir', owner: 'thor', maker: 'dwarves' });
items.insert({ name : 'gungnir', owner: 'odin', maker: 'elves' });
items.insert({ name : 'tyrfing', owner: 'Svafrlami', maker: 'dwarves' });
items.insert({ name : 'draupnir', owner: 'odin', maker: 'elves' });
// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
tyrfing.owner = 'upated';
// These statements send to Text Output
logText('tyrfing value :');
logObject(tyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));
// This statement sends to Inspector
inspectObject(db);
插入几个虚拟数据后;我从同一个集合中获取并将其分配给一个名为 "tyrfing";
的 templ 变量现在,问题来了;我用名为 "upated" 的新值对所有者 属性 进行了更新。尽管我没有让 loki save/update 更新;
当我调用名称为 "tyrfing" 的查找时,它给出的响应为
odins items
[
{
"name": "tyrfing",
"owner": "upated",
"maker": "dwarves",
"meta": {
"revision": 0,
"created": 1554823595464,
"version": 0
},
"$loki": 3
}
]
这是不正确的,我希望响应中的所有者名称为 "Svafrlami";因为我没有提交任何数据库;
如有不妥请指正;
您可以通过复制粘贴此代码在线测试此代码:http://www.obeliskos.com/LokiSandbox/
我花了几分钟想通了; items.find
正在返回 actual/real 对象引用;因此,如果我进行任何更改,它也会反映在原件中;
所以我克隆了从查找中得到的原始对象,然后对克隆的对象进行了更改并且它起作用了:)
这是代码:
var clone = require('clone');
// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
var temptyrfing = clone(tyrfing);
temptyrfing.owner = 'upated';
// These statements send to Text Output
logText('tyrfing value :');
logObject(temptyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));
我使用 "clone" npm 模块克隆对象
请post我,如果还有其他可能的话;
@Creator 实际上,LokiJS 的做法是在集合构造函数中传递 clone
选项:docs
您还可以指定要使用的克隆方法。